JSON действительно для меня новичок. Как я могу использовать JSON.NET для добавления пары ключевых значений в уже созданный json файл?
Это выглядит так:
{
"data": {
"subData1": {
"key1":"value1",
"key2":"value2",
"key3":"value3"
},
"subdata2": {
"key4":"value4",
"key5":"value5",
"key6":"value6"
}
}
"key7":"value7",
"key8":"value8"
}
Скажем, например, что я хочу изменить его на следующее:
{
"data": {
"subData1": {
"key1":"value1",
"key2":"value2",
"key3":"value3"
},
"subdata2": {
"key4":"value4",
"key5":"value5",
"key6":"value6"
},
"newSubData": {
"myKey1":"myVal1",
"myKey2":"myVal2",
"myKey3":"myVal3"
}
}
"key7":"anotherValChangeByMe",
"key8":"value8"
}
Нужно ли читать весь JSON файл в динамике, а затем изменять/добавлять вещи, которые мне нужны?
Вы можете разобрать JSON в JObject
, манипулировать им через LINQ-to-JSON API, а затем получить обновленную строку JSON из JObject
.
Например:
string json = @"
{
""data"": {
""subData1"": {
""key1"": ""value1"",
""key2"": ""value2"",
""key3"": ""value3""
},
""subdata2"": {
""key4"": ""value4"",
""key5"": ""value5"",
""key6"": ""value6""
}
},
""key7"": ""value7"",
""key8"": ""value8""
}";
JObject root = JObject.Parse(json);
JObject data = (JObject)root["data"];
JObject newSubData = new JObject();
newSubData.Add("myKey1", "myValue1");
newSubData.Add("myKey2", "myValue2");
newSubData.Add("myKey3", "myValue3");
data.Add("newSubData", newSubData);
root["key7"] = "anotherValChangeByMe";
Console.WriteLine(root.ToString());
Вывод:
{
"data": {
"subData1": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"subdata2": {
"key4": "value4",
"key5": "value5",
"key6": "value6"
},
"newSubData": {
"myKey1": "myValue1",
"myKey2": "myValue2",
"myKey3": "myValue3"
}
},
"key7": "anotherValChangeByMe",
"key8": "value8"
}
JSON - это, в конечном счете, просто строка. Если вы работаете на стороне сервера, то, если вы не захотите сами проанализировать JSON, самый простой способ - использовать JSON.NET для десериализации его обратно в его собственную объектную модель. Конечно, вы также можете сделать это на стороне клиента с помощью JSON.parse()
и добавить туда значение.