Замените свойства Json на NewtonSoft - PullRequest
0 голосов
/ 30 октября 2019

Не знаю, с чего начать, поэтому у меня нет примера кода.

Мне нужно изменить имя свойства в документе json.

var json = (@"{""id"":""12"",
   ""title"":""My Title"",
   ""Chunks"":[ 
      { 
         ""id"":""137"",
         ""title"":""Title"",
         ""description"":""null"",
         ""selections"":[ 
            { 
               ""id"":""169"",
               ""title"":""Choice"",
               ""sort_order"":""null"",
               ""questions"":[ 
               ]
            }
         ]
      }
   ]
}
}
}");

Мне нужно изменить «id» со значением 12 на «document_id» и оставить другие идентификаторы в покое. Существуют ли какие-либо библиотеки C #, такие как NewtonSoft, которые позволяют вам изменять свойство, а не значение свойства. Похоже на обычный сценарий, но я не видел ничего похожего на то, что я пытаюсь сделать. Я полагаю, я мог бы преобразовать JSON в строку и сделать замену, но это не выглядит очень элегантно.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Подход с использованием Newtonsoft.Json.Linq.JObject будет выглядеть примерно так:

var obj = JObject.Parse(json);
obj["document_id"] = obj["id"]; // create new property called "document_id"
obj.Remove("id"); // remove the "id" property
Console.WriteLine(obj);

Также обратите внимание, что ваш JSON недействителен. У него есть два дополнительных } в конце.

0 голосов
/ 31 октября 2019

Предполагая, что вы захотите заменить все ключи, когда может быть более одного узла с ключом в качестве "id" и значением "12", вы можете использовать Linq для идентификации токенов с помощью ключа "Id" и значения "12" изатем используйте методы Add / Remove для создания нового узла с другим именем.

Например,

JToken node = JToken.Parse(json);
var jObjectsWithTitle = node
    .SelectTokens("$..*")
    .OfType<JObject>()
    .Where(x => x.Property("id") != null &&  Convert.ToInt32(x.Property("id").Value) == 12);

foreach(var item in jObjectsWithTitle)
{
        item.TryGetValue("id",out var currentValue);
        item.Add("document_id",currentValue);
        item.Remove("id");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...