Пример:
У меня есть следующий объект JSON.
{"currentVersion" : "10.0",
"folders" : [],
"services" : [
{"name" : "nyc", "type" : "MapServer"},
{"name" : "philly", "type" : "MapServer"}
]
}
Я хочу смочь удалить один или несколько объектов из сервисного массива на основе значения атрибута имени. Например, я хочу искать имя = "Нью-Йорк Сити" и удалить следующий объект из массива.
{"name" : "nyc", "type" : "MapServer"}
Конечным результатом является объект, который похож на это:
{"currentVersion" : "10.0",
"folders" : [],
"services" : [
{"name" : "philly", "type" : "MapServer"}
]
}
Я смог создать новый объект JSON довольно легко, и я могу считать существующие. Однако у меня есть трудно определение лучшего способа изменить существующий объект JSON. Особенно, поскольку это касается запросов для конкретных объектов в объекте JSON.
Один метод, который я раскрыл (характерный для этого примера) должен восстановить части JSON, что я хочу измененный и заменяю маркеры по мере необходимости. Однако я должен думать, что существует лучший путь. Этот код показывают ниже.
string json = @"{""currentVersion"" : ""10.0"",
""folders"" : [],
""services"" : [
{""name"" : ""nyc"", ""type"" : ""MapServer""},
{""name"" : ""philly"", ""type"" : ""MapServer""}
]
}";
string[] keepList = new string[] { "nyc" };
JObject o = JObject.Parse(json);
JArray services = (JArray)o["services"];
JArray newServices = new JArray();
foreach (JToken service in services)
{
foreach (string keeper in keepList)
{
if ((string)service["name"] == keeper)
{
newServices.Add(service);
break;
}
}
}
services.Replace(newServices);
string output = o.ToString();
Как я могу лучше всего использовать Json.NET для изменения частей существующего объекта JSON?
Мне еще предстоит определить альтернативный способ изменения существующего JSON, отличный от того, который был указан в исходном вопросе. Если появится лучший способ, я с радостью приму это как правильный ответ.
Тем временем решение, которое я реализовал, заключается в замене частей объекта JSON, которые мне нужно модифицировать, вновь созданными объектами. Пример показан ниже.
string json = @"{""currentVersion"" : ""10.0"",
""folders"" : [],
""services"" : [
{""name"" : ""nyc"", ""type"" : ""MapServer""},
{""name"" : ""philly"", ""type"" : ""MapServer""}
]
}";
string[] keepList = new string[] { "nyc" };
JObject o = JObject.Parse(json);
JArray services = (JArray)o["services"];
JArray newServices = new JArray();
foreach (JToken service in services)
{
foreach (string keeper in keepList)
{
if ((string)service["name"] == keeper)
{
newServices.Add(service);
break;
}
}
}
services.Replace(newServices);
string output = o.ToString();