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 шт):
Я стал разбираться, и получилось, что я просто не дочитал до нужного места.
Вот так делается то, что я назвал "доступ по ключу"
https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
Ну и дальше в том же духе, сейчас дочитаю и напишу подробный ответ. я просто попал в типичную ловушку: любая документация по newtonsoft начинается с десериализации, и дальше я просто не посмотрел.