2016-08-12 28 views
1

私は以下のようにjsonデータを持っています、Item_idが一致すれば "revs"配列に新しいエントリを追加したいと思います。 1既存のJSONデータは、「回転数」列内の2つの項目で構成されており、json.net、既存の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:私はC++前ためjsoncppを使用し、私はループ基準物体とを介して、私はそれに容易

おかげでJSONデータを変更していることができます。

答えて

2

のみのアレイ内の1つのアイテムを持っていると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

あなたの答えを行う時間クエリ構文が働いているように見えるが、私は与えたJSONデータは一例であり、実際には複数の根と複数の項目、とにかくあなたの助けに感謝しています。 – hghew

1

それを参照してください一意になりRootを想定すると、私の人生を楽にしてくれるLINQの実現、次のコードは私のために働いていますが、複数のルート、アイテムが含まれています。

申し訳ありませんが、私はまだ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); 
関連する問題