2016-08-12 2 views
1

아래와 같이 json 데이터가 있습니다. Item_id가 일치하면 "revs"배열에 새 항목을 추가하고 싶습니다. Item_id를보고 싶습니다. (1) 기존 JSON 데이터 "올린다"어레이 내부에 두 항목을 구성 및JSON 개체를 기존 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

에만 배열의 하나 개의 항목을 가지고 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);