DT Dev Tools

Konwerter JSON na C++ — Generator struktur

Konwertuj JSON na struktury lub klasy C++ online z from_json i to_json z nlohmann/json, polami std::optional i przestrzeniami nazw. Za darmo, szybko i prywatnie.

🔒 Działa całkowicie w Twojej przeglądarce — nic nie jest przesyłane

Reklama

Generuj typy C++ z JSON

C++ nie ma wbudowanej refleksji, więc mapowanie JSON na własne typy zwykle oznacza napisanie struktury, a następnie pary funkcji serializacji dla każdego obiektu w danych. Ten konwerter JSON na C++ generuje jedno i drugie na podstawie przykładu. Każdy obiekt JSON staje się strukturą struct (lub klasą z getterami i setterami), klucze stają się składowymi w snake_case, obiekty zagnieżdżone stają się osobnymi typami, tablice zamieniają się w std::vector<T>, liczby całkowite w int64_t, liczby ułamkowe w double, a pola brakujące lub równe null w części przykładu — w std::optional<T>. Całość jest umieszczana w wybranej przestrzeni nazw i zapisywana jako jeden nagłówek zabezpieczony przez #pragma once.

Wnioskowaniem typów zajmuje się quicktype, który przed wyborem typu łączy wszystkie elementy każdej tablicy. Pole występujące tylko w niektórych elementach i tak jest rozpoznawane jako opcjonalne, więc parsowanie pełnej odpowiedzi nie zgłasza błędu z powodu brakującego klucza.

Integracja z nlohmann/json

Wygenerowany nagłówek jest przeznaczony dla nlohmann/json, najpopularniejszej biblioteki JSON dla nowoczesnego C++. Dla każdego typu definiuje przeciążenia from_json i to_json, które odwzorowują składowe na oryginalne klucze JSON, oraz niewielkie funkcje pomocnicze dla wartości opcjonalnych. Gdy json.hpp jest dostępny, odczytanie dokumentu to jedno wywołanie nlohmann::json::parse(text).get<Root>(), a zapisanie go z powrotem to nlohmann::json j = value;. Zaznacz Types only, jeśli potrzebujesz samych deklaracji — na przykład do użycia z innym serializatorem — oraz Use Boost, jeśli Twój toolchain nie obsługuje C++17.

Wskazówki dla kodu produkcyjnego

Wklej kompletny przykład z kilkoma elementami tablic i wypełnionymi polami opcjonalnymi, aby typy były dokładne. Puste tablice i wartości null zamieniają się w nlohmann::json, co zwykle warto zastąpić. Zmień nazwę typu głównego tak, by pasowała do Twojej domeny, ustaw przestrzeń nazw odpowiednią dla projektu i uruchom clang-format na wyniku. Sprawdź szerokość liczb całkowitych, rozważ enum class dla ciągów o stałym zbiorze wartości i pamiętaj, że ciągi daty i czasu pozostają typu std::string, dzięki czemu możesz je parsować wybraną biblioteką. Całe przetwarzanie odbywa się lokalnie, więc wewnętrzne dane zostają na Twoim komputerze.

Jak używać

  1. Wklej JSONWklej dokument JSON lub kliknij Load sample.
  2. SkonfigurujUstaw nazwę typu głównego, przestrzeń nazw, styl struktury lub klasy oraz obsługę pól opcjonalnych.
  3. Dodaj nagłówekSkopiuj kod lub pobierz plik .hpp i dołącz go obok json.hpp.

Najczęściej zadawane pytania

Z jakiej biblioteki JSON korzysta wygenerowany kod?
Jest przeznaczony dla nlohmann/json. Nagłówek zawiera przeciążenia from_json i to_json, więc nlohmann::json::parse(text).get<Root>() działa od razu.
Jakiego standardu C++ wymaga?
Domyślnie C++17, ponieważ pola opcjonalne używają std::optional. Zaznacz Use Boost, aby zamiast tego użyć boost::optional, jeśli jesteś ograniczony starszym standardem.
Czy mogę uzyskać klasy z getterami i setterami?
Tak. Przełącz Types na klasy z getterami/setterami, aby mieć hermetyzowane składowe, lub pozostaw zwykłe struktury jako proste nośniki danych.
Czy mój JSON jest przesyłany na serwer?
Nie. Nagłówek jest generowany w całości w Twojej przeglądarce; nic nie jest wysyłane na serwer.
Reklama