Конвертер 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, так что их можно разбирать любой библиотекой на ваш выбор. Вся обработка выполняется локально, поэтому внутренние данные остаются на вашем компьютере.
Как использовать
- Вставьте JSONВставьте документ JSON или нажмите Load sample.
- НастройтеУкажите имя корневого типа, пространство имён, стиль структуры или класса и поддержку необязательных полей.
- Добавьте заголовокСкопируйте код или скачайте файл .hpp и подключите его рядом с json.hpp.
Часто задаваемые вопросы
Какую библиотеку JSON использует сгенерированный код?
from_json и to_json, поэтому nlohmann::json::parse(text).get<Root>() работает сразу.Какой стандарт C++ требуется?
std::optional. Отметьте Use Boost, чтобы вместо этого использовать boost::optional, если вы ограничены более старым стандартом.