как добавить пустой массив в полезную нагрузку json?

#c# #.net #json #json.net

#c# #.net #json #json.net

Вопрос:

Возможно ли добавить массив в полезную нагрузку json?

Допустим, это моя полезная нагрузка:

         string json = @"{
          'channel': {
            'title': 'Star Wars',
            'link': 'http://www.starwars.com',
            'description': 'Star Wars blog.',
            'obsolete': [{'something':'awesome'},{'a':'b'}],
            'item': [],
            'nested':[{'upgrademe':'please'}, {'upgrademe':'no'}]
          }
        }";
  

Результат, который я хотел бы получить, был бы примерно таким:

         string json = @"{
          'channel': {
            'title': 'Star Wars',
            'link': 'http://www.starwars.com',
            'description': 'Star Wars blog.',
            'obsolete': [{'something':'awesome'},{'a':'b'}],
            'item': [],
            'nested':[{'upgrademe':'please', 'emptyArray':[]}, {'upgrademe':'no'}]
          }
        }";
  

Для каждого channel.nested where upgrademe == please тогда я хотел бы добавить пустой массив, подобный [] .

перед:

'nested':[{'upgrademe':'please'}, {'upgrademe':'no'}]

после:

'nested':[{'upgrademe':'please', 'emptyArray':[]}, {'upgrademe':'no'}]

Моя текущая реализация:

     public static JObject AddArray(this JObject jObject, string path, string key, string value)
    {
        var obs = jObject.SelectToken(path);
        if (obs == null)
        {
            return jObject;
        }

        foreach (var jsonObject in obs)
        {
            if (jsonObject.SelectToken(key).ToString().ToLower() != value.ToLower())
            {
                continue;
            }

            jObject.SelectToken(path).Parent.AddAfterSelf(new JValue(new JProperty("emptyArray", new JArray())));
        }

        return jObject;
    }
  

Я получаю исключение в этой строке:

введите описание изображения здесь

пример использования:

         var result = jobject.AddArray("channel.nested", "upgrademe", "please");
  

выше говорится следующее:

найдите объект «channel.nested» и при обновлении ==пожалуйста, добавьте узел sibbling в качестве пустого массива

Как мы можем условно добавить объект array в полезную нагрузку json?

Комментарии:

1. не понимаю уместности вашего комментария @AlexM

2. Попробуйте это без JValue, например AddAfterSelf(new JProperty("emptyArray", new JArray()))

3. @AmanB вот и все! пожалуйста, превратите это в ответ

4. Рад, что это помогло.

Ответ №1:

Поскольку вы добавляете новое свойство в объект. Вам не нужно использовать JValue

Просто используйте JProperty напрямую:

AddAfterSelf(new JProperty("emptyArray", new JArray()))