我想爲現有的json字符串添加json屬性(名稱和值)或json數據(數組)。如何使用json路徑在json字符串中添加新屬性
用戶必須指定一個json路徑來指定添加它的位置。
有人可以幫助我提供一個鏈接/示例來取得進展。
問候, 阿馬爾
我想爲現有的json字符串添加json屬性(名稱和值)或json數據(數組)。如何使用json路徑在json字符串中添加新屬性
用戶必須指定一個json路徑來指定添加它的位置。
有人可以幫助我提供一個鏈接/示例來取得進展。
問候, 阿馬爾
編輯:經過google'ing有點我注意到.SelectToken()
!當提到XPath時,這是我想到的。
// Inpup JSON
string input = "{ body: { name: { firstname: 'John', lastname: 'Doe' }, age: 43 } }";
JToken json = JToken.Parse(input); // Parsed to JToken as type may not be known.
// Select token based on JSONPath, see: http://goessner.net/articles/JsonPath/
JToken nameToken = json.SelectToken("$['body']['name']");
nameToken["middlename"] = "something";
// Prints: {"body":{"name":{"firstname":"John","lastname":"Doe","middlename":"something"},"age":43}}
string output = json.ToString(Newtonsoft.Json.Formatting.None);
OLD:
好像你想要的東西,例如Xpath的JSON。所以你可以找到一個現有的對象/數組並添加到?
我的建議是爲Json搜索現有的路徑工具。 這裏是你可以怎麼做一個快速和骯髒的例子:
static void Main(string[] args)
{
string input = "{ body: { name: { firstname: 'John', lastname: 'Doe' }, age: 43 } }";
JToken json = JToken.Parse(input);
UpdateJson(json, "body/name/middlename", "Something");
// {"body":{"name":{"firstname":"John","lastname":"Doe","middlename":"Something"},"age":43}}
string output = json.ToString(Newtonsoft.Json.Formatting.None);
UpdateJson(json, "body/jobs", new JArray(){ "C# Dev", "Network Master" });
// {"body":{"name":{"firstname":"John","lastname":"Doe","middlename":"Something"},"age":43,"jobs":["C# Dev","Network Master"]}}
string output2 = json.ToString(Newtonsoft.Json.Formatting.None);
}
private static void UpdateJson(JToken source, string path, JToken value)
{
UpdateJsonInternal(source, path.Split('/'), 0, value);
}
private static void UpdateJsonInternal(JToken source, string[] path, int pathIndex, JToken value)
{
if (pathIndex == path.Length - 1)
{
if (source is JArray)
{
((JArray)source)[int.Parse(path[pathIndex])] = value;
}
else if (source is JObject)
{
((JObject)source)[path[pathIndex]] = value;
}
}
else if (source is JArray)
{
UpdateJsonInternal(((JArray)source)[int.Parse(path[pathIndex])], path, pathIndex + 1, value);
}
else if (source is JObject)
{
UpdateJsonInternal(((JObject)source)[path[pathIndex]], path, pathIndex + 1, value);
}
}
}
這增加或更新與指定路徑的JToken價值的源泉。 所以'body/name/middlename'或者將'middlename'添加到'name'或者用'value'更新它。如果'name'不存在,這個例子簡單地失敗。
你可以用Newtonsoft.Json:
var input = "{ test: true }";
var jObject = JObject.Parse(input);
jObject["updated"] = true;
jObject["array"] = new JArray("item1", "item2", "item3");
var s = jObject.ToString();
// { test: true, updated: true, array: ["item1", "item2", "item3"] }
Console.WriteLine(s);
上面我們已經分析到一個JObject
JSON字符串,然後與JObject我們可以開始添加字段進行修改等等。然後找回我們在JObject上調用ToString
的字符串表示。
謝謝凱文。有沒有什麼辦法設置JSON值沒有屬性名稱,只需追加到現有的JSON –
感謝彼得快速響應。 –
感謝Peter和Kevin的快速回復。如何從路徑主體/名稱中獲取JObject,以便我可以設置jObject [「middlename」] =「something」;而不是迭代。根據我的要求,用戶必須輸入路徑,屬性。這裏的屬性可以是名稱和值對或JSON數據本身。所以我需要jObject [property] = value; –
好的,我搜索了一下,發現'.SelectToken()'。這個功能允許你選擇一個基於路徑的json令牌。你可以閱讀更多的路徑:http://goessner.net/articles/JsonPath/ 我已經編輯了我的答案一個簡單的例子 –