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

Пример:

У меня есть следующий объект JSON.

{"currentVersion" : "10.0", 
  "folders" : [], 
  "services" : [
    {"name" : "nyc", "type" : "MapServer"}, 
    {"name" : "philly", "type" : "MapServer"}
  ]
}

Я хочу иметь возможность удалить один или несколько элементов из массива служб на основе значения атрибута name. Например, я хочу найти name = "nyc" и удалить следующий объект из массива.

{"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?

1 Ответ

8 голосов
/ 13 июля 2010

Мне еще предстоит определить альтернативный способ изменения существующего 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...