2016-03-07 43 views
1

我從用戶獲取JSON和JSONPath。用戶還給我一個他想添加到他的JSON中的新內容(值或對象)。我試圖創建一個方法,將新的內容添加到JSONPath指定的路徑。通過JSONPath在指定位置添加JSON

方法輸入:JSON,jsonpath,newcontent(字符串) 方法輸出:具有添加newcontent

JSON例如

{ "store": { 
    "book": [ 
     { "category": "reference", 
     "author": "Nigel Rees", 
     "title": "Sayings of the Century", 
     "price": 8.95 
     }, 
     { "category": "fiction", 
     "author": "Evelyn Waugh", 
     "title": "Sword of Honour", 
     "price": 12.99 
     } 
    ] 
    } 
} 

JSONPath例如

$.store 

新JSON 要添加的對象

movie [title : The Godfather] 

方法返回

{ "store": { 
    "book": [ 
     { "category": "reference", 
     "author": "Nigel Rees", 
     "title": "Sayings of the Century", 
     "price": 8.95 
     }, 
     { "category": "fiction", 
     "author": "Evelyn Waugh", 
     "title": "Sword of Honour", 
     "price": 12.99 
     } 
    ], 
    "movie": [ 
     { 
     "title" : "The Godfather" 
     } 
    ] 
    } 
} 

回答

2

你可以做這樣的事情:

string ApplyChange(string originalJson, string path, string jsonToAdd) 
{ 
    var root = JObject.Parse(originalJson); 
    var node = root.SelectToken(path); 
    switch (node.Type) 
    { 
     case JTokenType.Object: 
     { 
      var objectToMerge = JObject.Parse("{" + jsonToAdd + "}"); 
      ((JObject)node).Merge(objectToMerge); 
      break; 
     } 
     case JTokenType.Array: 
     { 
      var objectToMerge = new JArray(JToken.Parse(jsonToAdd)); 
      ((JArray)node).Merge(objectToMerge); 
      break; 
     } 
     default: 
      throw new NotSupportedException(); 
    } 
    return root.ToString(); 
} 
+0

謝謝你的提示,我知道這樣 - 但數據哪個用戶希望添加將會動態改變。 –

+0

@JamesTheEvangelist,這個數據是如何指定的?你可以輕鬆解析它到一個有效的JSON對象嗎? –

+0

用戶給我一個JSON格式的數據(他想要添加的)。防爆。 ''電影「:[ { 」title「:」sometitle「 } ] '或''title」:「sometitle」'數據可以有其他值。那些書和電影只是一個例子:)。 –

相關問題