• 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
  • 相关阅读:
    Linux(Unix)时钟同步ntpd服务配置方法(转载)
    Linux SSH Publickey登录!
    三个最短路算法
    三个最短路算法
    最大子列和问题
    哈密尔顿环
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    c++11的记录
    最大子列和问题
  • 原文地址:https://www.cnblogs.com/skywss27/p/8978132.html
Copyright © 2020-2023  润新知