Konwerter C++ na JSON
Wklej structy lub obiekty C++. Dostajesz czysty JSON.
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.
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++.
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.
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: