Wklej C++ po lewej i kliknij "Konwertuj" — zamienimy go na JSONWklej kod C++

Co robi to narzędzie

Jeśli kiedyś potrzebowałeś payloadu JSON odwzorowującego structa z C++ — do API, do fixture'u albo do configa — to znasz rutynę: wciągnąć nlohmann::json, napisać klej to_json i zbudować od nowa. Wklej C++ tutaj i dostaniesz poprawny JSON bez żadnego z tych kroków. Obsłuży pojedynczy inicjalizator, cały nagłówek pełen structów albo coś z zagnieżdżonymi template'ami — efekt ten sam: czysty dokument JSON, każde pole zachowane.

Konwerter rozumie, jak wartości C++ faktycznie się serializują. std::string staje się stringiem JSON, literały liczbowe jak 49.99f czy 42u trafiają jako liczby JSON bez sufiksu, bool idzie jako true/false, a std::vector<T> / std::array<T,N> jako tablice JSON. std::optional<T> z std::nullopt schodzi do null; z wartością serializuje typ wewnętrzny. std::map i std::unordered_map z kluczami typu string stają się obiektami JSON, zgodnie z konwencjami cppreference.

Designated initializery z C++20 (.field = value) są obsłużone, tak samo jak aggregate initializer listy. Wklej kilka structów naraz i każdy wyjdzie jako osobny wpis najwyższego poziomu w JSON-ie, z rozwiniętymi typami zagnieżdżonymi. Jeśli przychodzisz ze świata Boost.JSON, wynik pokrywa się z tym, czego byś oczekiwał po boost::json::value_from — tylko bez akrobatyki na template'ach.

Jak tego używać

Trzy kroki. Działa zarówno dla pojedynczej listy inicjalizacyjnej, jak i dla całego nagłówka z tuzinem structów.

1

Wklej swój C++ (albo wczytaj przykład)

Wrzuć swój C++ do lewego edytora tak, jak jest. Definicja structa, klasa, lista inicjalizacyjna, wiele typów albo struktury zagnieżdżone — wszystko gra. Kliknij Wczytaj przykład, jeśli wolisz najpierw zobaczyć realistyczny przypadek.

Nie musisz wycinać dyrektyw #include, namespace'ów ani template'ów. Zostaw składnię C++ w spokoju — parser sobie z nią poradzi. Jeśli chcesz zerknąć do standardu, oficjalne materiały są na ISO C++.

2

Kliknij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie czyta C++, zachowuje każdego structa i każde pole, i wypluwa JSON za jednym zamachem. W trakcie pokazuje się krótki wskaźnik ładowania.

3

Skopiuj JSON

Prawy panel wypełni się JSON-em z wcięciami. Wrzuć go do swojego wywołania REST, do test fixture'a, do configa obok CMakeLists albo do dokumentacji. I zamknięta pętla.

Kiedy naprawdę się przydaje

Payloady requestów API

Masz struct requestu w C++ i potrzebujesz JSON-a do wrzucenia w curl albo Postmana. Wklejasz structa, bierzesz JSON, idziesz dalej.

Szablony plików konfiguracyjnych

Struct Settings z 40 polami zmienia się w gotowy do edycji szablon JSON — bez ręcznie pisanego rusztowania, bez zapomnianych kluczy.

Dokumentacja trzymająca się kodu

Generuj przykłady JSON do README albo referencji API wprost z prawdziwych structów, żeby dokumentacja przestała się rozjeżdżać z rzeczywistością.

Fixture'y testowe i seedy

Zamień listy inicjalizacyjne z unit testów w pliki seed JSON dla testów integracyjnych, mock serwerów albo loaderów bazy danych.

Częste pytania

Muszę mieć zainstalowany nlohmann::json albo Boost?

Nie. Narzędzie działa po stronie serwera i nie uruchamia twojego kodu — dostajesz JSON bez wciągania żadnej biblioteki do serializacji. Jeśli mimo wszystko chcesz biblioteki do runtime'u, nlohmann/json i Boost.JSON to obie solidne opcje.

Radzi sobie z std::optional, std::variant i smart pointerami?

std::optional<T> z std::nullopt staje się null; z wartością serializowany jest typ wewnętrzny. std::unique_ptr i std::shared_ptr są traktowane tak samo — null gdy puste, w przeciwnym razie wskazywana wartość. std::variant używa aktualnie aktywnej alternatywy.

A co z kontenerami jak std::vector i std::map?

std::vector, std::array, std::list, std::set i std::deque zostają tablicami JSON. std::map / std::unordered_map z kluczami stringowymi zamieniają się w obiekty JSON; przy kluczach nie-stringowych klucze są stringifikowane zgodnie z semantyką kontenerów z cppreference.

Mogę wkleić kilka structów naraz?

Tak — wklej cały nagłówek albo plik .cpp. Każdy agregat najwyższego poziomu wychodzi jako osobny klucz w JSON-ie, z rozwiniętymi typami zagnieżdżonymi. Odziedziczone pola z klas bazowych też są uwzględnione.

Czy mój kod jest zapisywany?

Kod trafia na backend do konwersji i nie jest przechowywany na stałe — nie logujemy payloadu. Jak zawsze, jeśli kod jest naprawdę wrażliwy, rzuć na niego okiem przed wklejeniem.

A co jeśli kod zawiera template'y, makra albo lambdy?

Template'y z konkretnymi typami działają bez problemu. Niezinstancjonowane template'y, makra i lambdy wychodzą jako null zamiast wywalać całą konwersję, więc reszta twoich danych i tak przechodzi. Oczywiste błędy składniowe popraw wcześniej — parser jest wyrozumiały, ale to nie jest pełny kompilator.

Inne narzędzia, które mogą się przydać

C++ na JSON to tylko jeden element układanki. Te dobrze grają razem: