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"
    }
  ]
}
复制代码

 

posted @   skywss27  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示