Triple transfer json
public class Triple { public Triple(string _S, string _P, string _O) { this._S = _S; this._P = _P; this._O = _O; } public string _S { set; get; } public string _P { set; get; } public string _O { set; get; } }
function
static void TripleTransferJson(string _S, ref JObject obj) { if (list == null || list.Count == 0) return; List<Triple> sublist = list.Where(a => a._S == _S).ToList(); obj.Add("PrimaryKey", _S); //get property Count Dictionary<string, int> dt = GetPropertyCount(sublist); foreach (var item in sublist) { if (item._O.StartsWith("\"") && dt[item._P] == 1) obj.Add(item._P, item._O); if (item._O.StartsWith("\"") && dt[item._P] > 1) { if (obj.ContainsKey(item._P)) ((JArray)obj[item._P]).Add(item._O); else obj.Add(item._P, new JArray(item._O)); } sublist = list.Where(a => a._S == item._O).ToList(); JObject jObj = new JObject(); TripleTransferJson(item._O, ref jObj); if (dt[item._P] == 1 && !item._O.StartsWith("\"")) obj.Add(item._P, jObj); if (dt[item._P] > 1 && !item._O.StartsWith("\"")) { if (obj.ContainsKey(item._P)) ((JArray)obj[item._P]).Add(jObj); else obj.Add(item._P, new JArray(jObj)); } } } static Dictionary<string, int> GetPropertyCount(List<Triple> list) { if (list == null || list.Count == 0) return null; Dictionary<string, int> dt = new Dictionary<string, int>(); var pc = from p in list group p by p._P into g select new { property = g.Key, count = g.Count() }; foreach (var item in pc) { dt.Add(item.property, item.count); } return dt; }
test data
list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.name", "\"Wangshuang")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.type", "\"people.person")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.gender", "\"female")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.name", "\"sky")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.image", "http://knowledge.microsoft.com/sfesfesfefd")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefs", "type.object.image", "http://knowledge.microsoft.com/sfesfesfef3")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefd", "type.object.type", "\"common.image")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfef3", "type.object.type", "\"common.image")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfefd", "type.image.uri", "\"http://www.baidu.com")); list.Add(new Triple("http://knowledge.microsoft.com/sfesfesfef3", "type.image.uri", "\"http://www.baidu.com")); JObject obj = new JObject(); TripleTransferJson("http://knowledge.microsoft.com/sfesfesfefs", ref obj); string json = obj.ToString();
test result
{ "PrimaryKey": "http://knowledge.microsoft.com/sfesfesfefs", "type.object.name": [ "\"Wangshuang", "\"sky" ], "type.object.type": "\"people.person", "type.object.gender": "\"female", "type.object.image": [ { "PrimaryKey": "http://knowledge.microsoft.com/sfesfesfefd", "type.object.type": "\"common.image", "type.image.uri": "\"http://www.baidu.com" }, { "PrimaryKey": "http://knowledge.microsoft.com/sfesfesfef3", "type.object.type": "\"common.image", "type.image.uri": "\"http://www.baidu.com" } ] }
I'm fine, it's ok
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具