Как я могу лучше всего использовать Json.NET для изменения частей существующего объекта JSON?

Пример:

У меня есть следующий объект 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?

8
задан Ryan Taylor 8 July 2010 в 18:40
поделиться

1 ответ

Мне еще предстоит определить альтернативный способ изменения существующего 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();
8
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: