?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
原文地址:https://www.cnblogs.com/skywss27/p/8978132.html