|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
Распарсить json при помощи библиотеки jsoncpp14.02.2024, 15:14. Показов 27623. Ответов 20
Метки нет (Все метки)
Кто работал с библиотекой jsoncpp подскажите, пожалуйста. Допустим есть строка, содержащяя json-код, нужно её распарсить и получить на выходе значение определённого ключа, примерно то же делает функция json_decode() в языке PHP. Пытался понять идущие с библиотекой примеры кода и ничего не понял кроме того, что мне нужно использовать класс Json::Value
Если есть решения, использующие не jsoncpp, а что-нибудь другое, то такие ответы тоже принимаются.
0
|
|
| 14.02.2024, 15:14 | |
|
Ответы с готовыми решениями:
20
Работа с Json-файлами. Библиотека jsoncpp C+ Парсинг Json при помощи библиотеки uLkJson Ошибка при сборке библиотеки jsoncpp |
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|
| 14.02.2024, 15:35 | |
|
0
|
|
|
Maniac
|
|||
| 17.02.2024, 16:56 | |||
|
0
|
|||
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|||||||
| 29.02.2024, 17:16 [ТС] | |||||||
ocument и есть методы Parse() чтобы преобразовать текст в объект и метод GetString() чтобы выполнить обратное преобразование.
А вот как обратиться к члену "weather", ведь его тип не строка, не число, а объект?
0
|
|||||||
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|||||||
| 29.02.2024, 19:47 | |||||||
|
Добавлено через 20 минут Isur, накидал пример с комментами
ещё есть интересный метод ParseInsitu.Плюсы - работает быстрее и, вроде, даже память не потребляет Минусы - на вход нужно подавать строго не константную строку (то есть, указатель на литерал сюда точно нельзя). Портит саму строку (расставляет '\0')Но у меня было как раз много случаев, когда строка лежит в массиве, а сохранять её не нужно. Поэтому ParseInsitu у меня очень популярен
0
|
|||||||
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|||||||
| 29.02.2024, 20:07 [ТС] | |||||||
0
|
|||||||
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|
| 29.02.2024, 20:17 | |
|
Isur, пример выше
0
|
|
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
| 02.03.2024, 09:35 [ТС] | |
|
Короче понял, что мне нужно перечитывать теорию по наследованию объектов и мапы. Потому что не понимаю как это: объект document - инициализирован, а объект weather - не инициализирован, но ошибка не возникает.
0
|
|
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|
| 02.03.2024, 10:29 | |
|
Isur, непонятно, о чём ты говоришь. В json нет никакого наследования и инициализации. Это структурированная разметка текста
{} - это словарь [] - это массив "2" - это строка 2 - это число
0
|
|
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
||||||
| 02.03.2024, 14:14 [ТС] | ||||||
|
Ну ладно, не буду сильно скрывать что я нуб, буду позориться по полной.
Вот это я не понимаю:
ocument хоть это не указывается?
0
|
||||||
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
||
| 02.03.2024, 14:19 | ||
|
Isur, weather - это ссылка на внутреннее представление (после парсинга) значения по ключу "weather". Это значение лежит в объекте document
далее проверяется условие - если weather это мапа, то это соответствует нашим ожиданиям. Начинаем ковыряться в weather Добавлено через 55 секунд auto&, в данном случае компилятор выведет этот тип как rapidjson::Value&
0
|
||
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
| 09.04.2024, 15:02 [ТС] | |
|
Кажись дошло, Document - это класс, наследованный от map, который в свою очередь является наследованным от string, а объекты классы map можно создавать при помощи конструкторов, не описывая. Просто наследование и конструкторы я понимаю с трудом.
0
|
|
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|
| 09.04.2024, 16:08 | |
|
Isur, не нужно тут никакое наследование. Весь документ, массив, мапа и объект - это элементы json-разметки
0
|
|
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
| 04.06.2024, 14:05 [ТС] | |
|
А если допустим мы не знаем, что document содержит ключи date и weather, как узнать список ключей. Кстати если использовать вместо rapidjson библиотеку nlohmann/json то методика будет такой же судя по примеру тут https://json.nlohmann.me/api/json/ Что такое map я так и не понял, вроде что-то относящееся с библиотеке string, но тогда причём тут?
0
|
|
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|||||||
| 04.06.2024, 14:14 | |||||||
|
Isur, map/словарь - ассоциативный массив (ключ -> значение)
doc.IsObject()затем в цикле бежим итератором
map.MemberCount() - количество ключей
0
|
|||||||
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
||
| 05.06.2024, 13:35 [ТС] | ||
|
А попытка использовать методы MemberBegin() и MemberEnd() вызвало у меня ошибку и здесь https://rapidjson.org/document_8h.html я их описание не нашёл.
0
|
||
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
|
| 05.06.2024, 13:48 | |
|
Isur, может, в новых версиях что наипереименовано. Надо разбираться. Вот тут есть примеры использования https://rapidjson.org/md_doc_tutorial.html
к слову, упомянутые методы в примерах есть Добавлено через 58 секунд либо доки они забыли переписать после изменения исходников
0
|
|
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
| 06.06.2024, 17:13 [ТС] | |
|
Вообще это моя первая попытка поработать с внешними библиотеками.
Попробовал как в примере в качестве типа переменной, возвращаемой функциями MemberBegin() и MemberEnd() указать auto - скомпилировалось без ошибки, видимо это какой-то внутренний тип библиотеки и их нельзя выводить. И я не совсем понимаю то о чём писал выше. document["weather"] - это обращение к члену объекта как к члену ассоциативного массива, но при этом во всех учебниках написано, что к членам объекта обращаются как к члену структуры, через точку. Это какое-то нововведение, появившееся с C++ v.11 или ещё более поздних стандартах языка?
0
|
|
|
фрилансер
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
|
||||
| 06.06.2024, 17:19 | ||||
rapidjson::Value::ConstMemberIterator или rapidjson::Value::MemberIteratorно auto как раз для того и придумали, чтобы не ломать пальцы и голову об клавиатуру ![]() rapidjson::Value::operator []. Он возвращает ссылку на rapidjson::Value
0
|
||||
|
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 139
|
|
| 12.06.2024, 10:11 [ТС] | |
|
Разобрался. Нужно было выполнить все примеры из туториала, чтобы понять.
0
|
|
| 12.06.2024, 10:11 | |
|
Помогаю со студенческими работами здесь
20
Распарсить xml в кириллице при помощи lxml Как распарсить XML при помощи MSXML Parser3.0 ?? Как спарсить array json библиотекой JsonCpp?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|