Конвертер 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, якщо ви обмежені старішим стандартом.