Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpApJsn 658 of 696 menu
◀ ▶

Разбор JSON-тела в C++

Тело ответа API - это всегда текст.

Перед разбором его удобно сохранить в переменную, даже если строка уже задана в программе. Библиотека nlohmann читает ключи по именам, в том числе когда значение само является объектом.

Для блока user собирают вложенный nlohmann::json, а корневой объект ссылается на него тем же ключом:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { nlohmann::json person; person["name"] = "john"; person["surn"] = "smit"; nlohmann::json doc; doc["user"] = person; doc["city"] = "London"; std::cout << doc.dump() << "\n"; return 0; }

Готовый фрагмент JSON можно разобрать сразу в дерево и обратиться к вложенным полям через цепочку operator[]:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { std::string raw = R"({ "user": { "name": "john", "surn": "smit" }, "city": "London" })"; nlohmann::json doc = nlohmann::json::parse(raw); std::cout << doc["user"]["name"].get<std::string>() << "\n"; std::cout << doc["city"].get<std::string>() << "\n"; return 0; }

Если в корне лежит массив строк, после разбора элементы доступны по индексу. Порядок в C++ совпадает с порядком в JSON:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { std::string raw = R"(["alpha","beta","gamma"])"; nlohmann::json tags = nlohmann::json::parse(raw); std::cout << tags[0].get<std::string>() << "," << tags[1].get<std::string>() << "," << tags[2].get<std::string>() << "\n"; return 0; }

Дана строка:

std::string raw = R"({ "user": { "name": "john", "surn": "smit" }, "city": "London" })";

Разберите ее в nlohmann::json. Выведите имя и город на отдельных строках.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить