#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()))