JSON обработка в C++: библиотеки, парсинг и сериализация данных

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

JSON обработка в C++: обзор библиотек и практические примеры

JSON (JavaScript Object Notation) — это легкий формат обмена данными, широко используемый в веб-приложениях, API и конфигурационных файлах. В C++ работа с JSON не встроена в стандартную библиотеку, поэтому разработчики используют сторонние библиотеки. В этой статье мы рассмотрим три наиболее популярных инструмента: nlohmann/json, RapidJSON и Boost.JSON. Вы узнаете, как их установить, парсить JSON, создавать собственные структуры и сериализовать данные. Все примеры сопровождаются кодом на C++.

1. Библиотека nlohmann/json

nlohmann/json — самая популярная библиотека для работы с JSON в C++. Она известна своим простым и интуитивным синтаксисом, напоминающим Python или JavaScript. Библиотека является header-only (только заголовочные файлы), что упрощает интеграцию: достаточно скопировать файл json.hpp в проект.

Установка

Скачайте json.hpp с GitHub и подключите его:

#include "json.hpp"
using json = nlohmann::json;

Парсинг JSON строки

#include <iostream>
#include "json.hpp"

int main() {
    std::string json_str = R"({
        "name": "Alice",
        "age": 30,
        "is_student": false,
        "skills": ["C++", "Python", "JSON"]
    })";

    json data = json::parse(json_str);

    std::cout << "Name: " << data["name"] << std::endl;
    std::cout << "Age: " << data["age"] << std::endl;
    std::cout << "First skill: " << data["skills"][0] << std::endl;

    return 0;
}

Создание и сериализация JSON

json person;
person["name"] = "Bob";
person["age"] = 25;
person["is_student"] = true;
person["languages"].push_back("C");
person["languages"].push_back("Java");

std::string serialized = person.dump(4); // 4 — отступ для красивого вывода
std::cout << serialized << std::endl;

2. Библиотека RapidJSON

RapidJSON — это высокопроизводительная библиотека, ориентированная на скорость и минимальное использование памяти. Она также является header-only и поддерживает SAX-стиль парсинга (потоковый) и DOM-стиль (построение дерева). Подходит для проектов, где важна производительность, например, в игровых движках или высоконагруженных серверах.

Установка

Скачайте файлы из репозитория RapidJSON и подключите:

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

Парсинг JSON

#include <iostream>
#include "rapidjson/document.h"

int main() {
    const char* json = "{\"name\":\"Charlie\",\"age\":28,\"active\":true}";
    rapidjson::Document doc;
    doc.Parse(json);

    if (doc.HasParseError()) {
        std::cerr << "Parse error!" << std::endl;
        return 1;
    }

    std::cout << "Name: " << doc["name"].GetString() << std::endl;
    std::cout << "Age: " << doc["age"].GetInt() << std::endl;

    return 0;
}

Создание JSON и сериализация

rapidjson::Document doc;
doc.SetObject();
rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();

doc.AddMember("name", "Diana", allocator);
doc.AddMember("score", 95.5, allocator);

rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
doc.Accept(writer);

std::cout << buffer.GetString() << std::endl;

3. Библиотека Boost.JSON

Boost.JSON — часть библиотек Boost, официально принятая в C++ Boost. Она обеспечивает надежную и стандартизированную работу с JSON. Требует компиляции (не header-only), но предоставляет богатый функционал: аллокаторы, потоковый парсинг, работу с ошибками.

Установка

Установите Boost (например, через пакетный менед

Рекомендаций