2016-08-12 77 views
1

我有一个JSON数据如下,我想添加新的条目“revs”数组如果Item_id匹配,让我说Item_id我看着1,现有的JSON数据由两个项目的“转速”数组中,并希望添加新条目json.net,添加/ apped新的对象/项目到现有的JSON对象

{ 
    "Root" : [ 
     { 
      "Item_Name" : "Test", 
      "Items" : [ 
       { 
        "Item_id" : "1", 
        "revs" : [ 
         { 
          "rev_id" : "1" 
         }, 
         { 
          "rev_id" : "3" 
         }, 
         { 
          "rev_id" : "need to add new entry here" 
         } 
        ] 
       }, 
       { 
        "Item_id" : "2", 
        "revs" : [ 
         { 
          "rev_id" : "1" 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

我喜欢这个

JObject jsonObject = JObject.Parse(<the json data above>); 

迭代JSON数据解析成“转速”后阵Item_id匹配并且我创建了一个JObject,并被添加到新的条目数据

JObject new_rev = new JObject(); 
new_rev["rev_id"] = "need to add new entry here" 

我该怎么做才能让我的new_rev数据反映在jsonObject中?

P/S:ⅰ通过使用jsoncpp用于C++之前和我只是循环参照对象,我可以具有经修饰的JSON数据到它容易

感谢。

回答

2

假设Root只有数组中的一个项目,假设Item_id将是独一无二的

JObject jsonObject = JObject.Parse(<the json string>); 
    JObject new_rev = new JObject(); 
    new_rev["rev_id"] = "need to add new entry here"; 
    JArray items = jsonObject["Root"][0]["Items"].Value<JArray>(); 
    foreach(var item in items){ 
     if(item.Value<JObject>()["Item_id"].Value<string>() == "1"){ 
      item["revs"].Value<JArray>().Add(new_rev); 
      break; 
     } 
    } 

看它这里https://dotnetfiddle.net/IYVULd

+0

你的答案^ h查询语法似乎工作,但我给JSON数据仅仅是例子,其实有多重根和多个项目,反正感谢您的帮助。 – hghew

1

我试着找出更好的方式来在数据添加,到底实现LINQ(方法语法)让我的生活更轻松,下面的代码为我工作,eventhough包含多个Root,项目

对不起,我还是LINQ的新手,也许有人可以启发我做同样的

JObject jsonObject = JObject.Parse(<existing json data>); 
JObject newNode = new JObject(); 
newNode["rev_id"] = "need to add new entry here" 

jsonObject["Root"].Children() 
         .Where(w => w["Item_Name"].ToString() == selectedItemName) 
         .Select(s => s["Items"]).Children() 
         .Where(w => w["Item_id"].ToString() == selectedItemId) 
         .Select(s => s["revs"]).Children() 
         .LastOrDefault().AddAfterSelf(newNode);