码迷,mamicode.com
首页 > Web开发 > 详细

Triple transfer json

时间:2018-05-02 02:28:10      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:contains   foreach   get   art   gen   class   return   UNC   amp   

  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"
    }
  ]
}

 

Triple transfer json

标签:contains   foreach   get   art   gen   class   return   UNC   amp   

原文地址:https://www.cnblogs.com/skywss27/p/8978132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!