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

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

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

Начать курс

JSON обработка в C++: библиотеки, парсинг и примеры

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

Зачем нужна библиотека для JSON в C++?

C++ — компилируемый язык, ориентированный на производительность. Ручной разбор JSON с помощью регулярных выражений или строковых операций — трудоёмкая и подверженная ошибкам задача. Специализированные библиотеки предоставляют:

  • Высокую скорость парсинга и сериализации.
  • Интуитивно понятный API (часто в стиле STL).
  • Поддержку стандартов JSON (включая вложенные объекты, массивы, null, Unicode).
  • Минимальное количество зависимостей (часто header-only).

1. Библиотека nlohmann/json (JSON for Modern C++)

Самая популярная и простая в использовании библиотека. Распространяется как header-only (один заголовочный файл). Идеально подходит для образовательных проектов и небольших приложений.

Установка

Скачайте файл json.hpp из репозитория nlohmann/json и подключите его:

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

Пример: парсинг JSON из строки

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

int main() {
    std::string json_str = R"({
        "name": "PythonLib",
        "year": 2025,
        "tags": ["C++", "JSON", "education"],
        "active": true
    })";

    json data = json::parse(json_str);

    std::cout << "Name: " << data["name"] << "\n";
    std::cout << "Year: " << data["year"] << "\n";
    std::cout << "First tag: " << data["tags"][0] << "\n";
    std::cout << "Active: " << data["active"] << "\n";

    return 0;
}

Пример: создание и сериализация JSON

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

int main() {
    json obj;
    obj["title"] = "JSON in C++";
    obj["pages"] = 42;
    obj["chapters"] = {"intro", "basics", "advanced"};
    obj["metadata"]["author"] = "PythonLib Team";

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

    return 0;
}

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

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

Установка

Скачайте архив с GitHub и подключите заголовочные файлы:

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

Пример: парсинг и чтение

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

int main() {
    const char* json = "{\"project\":\"PythonLib\",\"version\":2.0}";
    rapidjson::Document doc;
    doc.Parse(json);

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

    std::cout << "Project: " << doc["project"].GetString() << "\n";
    std::cout << "Version: " << doc["version"].GetDouble() << "\n";

    return 0;
}

Пример: генерация JSON

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

int main() {
    rapidjson::Document doc;
    doc.SetObject();

    rapidjson::Value name;
    name.SetString("PythonLib", doc.GetAllocator());
    doc.AddMember("name", name, doc.GetAllocator());

    rapidjson::Value tags(rapidjson                    

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