JSON в C# and C++: nlohmann VS newtonsoft.json

Господа, вопрос адресуется тем, кто лучше меня знает возможности библиотеки newtonsoft.json.

В общем, я на С++ c json (а именно, с nlohmann json) работал немножко больше, и привык к тому, что если у меня в коде есть

    json j;

то я могу писать такие прирятные выражения, как

    auto certAuth = j["certificationAuthority"];
    if ( !certAuth.empty() ){ ... }
  • то есть, здесь я беру часть json - файла по ключу, а) не задумываюсь о том, есть такой ключ или нети б) когда я что то взял по ключу - это тоже json и с ним можно продолжать работать как с json

Если я хочу проверить, что такой ключ есть - у меня есть метод .at()

Кроме того, я могу делать операции со вложенными json - элементами, типа

    if ( ! j["applicant"].at("shortName").is_null() )
            shortName = j["applicant"]["shortName"];

Кроме того, у меня есть итераторы для обхода списка, например,

    j["applicant"].begin()

И всё это - я делаю без необходимости десериализации json в какой то другой тип, что довольно удобно в моём случае: мне приходит большой json - документ, а нужна оттуда всего пара полей.

Но у меня есть старый код, написанный на C#, и там используется newtonsoft.json. А его я знаю хуже. И сразу переписать этот код я не могу, но там надо провернуть очень похожую операцию: есть большой json-документ со сложной структурой, а нужна оттуда всего пара полей. Путь к которым я знаю.

Но все примеры с newtonsoft, которые мне попадались, основаны были на том, что мы сначала с json - строкой (файлом, потоком и т.п.) делаем JsonConvert.DeserializeObject(), а потом уже работаем со свойствами десериализованного объекта.

Не подскажете ли мне, есть ли в C# возможность работать с json более нативно, примерно как это позволяет nlohmann? То есть, буквально, как "доступаться по ключу", проверять существование ключа в json и итерироваться по коллекции?

Возможно, все это есть либо в newtonsoft, либо в каком то другом месте, и я просто плохо искал.

Спасибо заранее.


Ответы (1 шт):

Автор решения: S.H.

Я стал разбираться, и получилось, что я просто не дочитал до нужного места.

Вот так делается то, что я назвал "доступ по ключу"

https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm

Ну и дальше в том же духе, сейчас дочитаю и напишу подробный ответ. я просто попал в типичную ловушку: любая документация по newtonsoft начинается с десериализации, и дальше я просто не посмотрел.

→ Ссылка