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 кудись?
Ні. Заголовок створюється повністю у вашому браузері; нічого не надсилається на сервер.
Реклама