DT Dev Tools

Конвертер JSON в C++ — генератор структур

Преобразуйте JSON в структуры или классы C++ онлайн с from_json и to_json из nlohmann/json, полями std::optional и пространствами имён. Бесплатно и приватно.

🔒 Работает полностью в вашем браузере — ничего не загружается

Реклама

Генерируйте типы C++ из JSON

В C++ нет встроенной рефлексии, поэтому сопоставление JSON с собственными типами обычно означает написание структуры, а затем пары функций сериализации для каждого объекта в данных. Этот конвертер JSON в C++ создаёт и то, и другое по образцу. Каждый объект JSON становится struct (или классом с геттерами и сеттерами), ключи становятся членами в snake_case, вложенные объекты становятся отдельными типами, массивы превращаются в std::vector<T>, целые числа — в int64_t, дробные — в double, а поля, которых нет или которые равны null в части образца, — в std::optional<T>. Всё оборачивается в выбранное пространство имён и выводится как единый заголовок с защитой #pragma once.

Вывод типов выполняет quicktype, который перед выбором типа объединяет все элементы каждого массива. Поле, встречающееся лишь в некоторых элементах, всё равно определяется как необязательное, поэтому разбор полного ответа не вызывает ошибку из-за отсутствующего ключа.

Интеграция с nlohmann/json

Сгенерированный заголовок рассчитан на nlohmann/json — самую популярную библиотеку JSON для современного C++. Для каждого типа он определяет перегрузки from_json и to_json, сопоставляющие члены с исходными ключами JSON, а также небольшие вспомогательные функции для необязательных значений. Когда json.hpp доступен, чтение документа — это один вызов nlohmann::json::parse(text).get<Root>(), а запись обратно — nlohmann::json j = value;. Отметьте Types only, если нужны только объявления — например, для другого сериализатора, — и Use Boost, если ваш тулчейн не поддерживает C++17.

Советы для боевого кода

Вставьте полный образец с несколькими элементами массивов и заполненными необязательными полями, чтобы типы получились точными. Пустые массивы и null превращаются в nlohmann::json, который обычно стоит заменить. Переименуйте корневой тип в соответствии с вашей предметной областью, задайте подходящее для проекта пространство имён и запустите clang-format для результата. Проверьте разрядность целых чисел, рассмотрите enum class для строк с фиксированным набором значений и помните, что строки даты и времени остаются std::string, так что их можно разбирать любой библиотекой на ваш выбор. Вся обработка выполняется локально, поэтому внутренние данные остаются на вашем компьютере.

Как использовать

  1. Вставьте JSONВставьте документ JSON или нажмите Load sample.
  2. НастройтеУкажите имя корневого типа, пространство имён, стиль структуры или класса и поддержку необязательных полей.
  3. Добавьте заголовокСкопируйте код или скачайте файл .hpp и подключите его рядом с json.hpp.

Часто задаваемые вопросы

Какую библиотеку JSON использует сгенерированный код?
Он рассчитан на nlohmann/json. Заголовок содержит перегрузки from_json и to_json, поэтому nlohmann::json::parse(text).get<Root>() работает сразу.
Какой стандарт C++ требуется?
По умолчанию C++17, так как необязательные поля используют std::optional. Отметьте Use Boost, чтобы вместо этого использовать boost::optional, если вы ограничены более старым стандартом.
Можно ли получить классы с геттерами и сеттерами?
Да. Переключите Types на классы с геттерами/сеттерами для инкапсулированных членов или оставьте простые структуры для обычных контейнеров данных.
Загружается ли мой JSON куда-либо?
Нет. Заголовок создаётся целиком в вашем браузере; на сервер ничего не отправляется.
Реклама