DT Dev Tools

JSON till C++ — Generera structs

Konvertera JSON till C++-structs eller klasser online med nlohmann/json from_json och to_json, std::optional-fält och namespaces. Gratis, snabbt och privat.

🔒 Körs helt i din webbläsare — ingenting laddas upp

Annons

Generera C++-typer från JSON

C++ har ingen inbyggd reflektion, så att mappa JSON till egna typer innebär oftast att man skriver en struct och sedan ett par serialiseringsfunktioner för varje objekt i datan. Den här JSON-till-C++-konverteraren genererar båda utifrån ett exempel. Varje JSON-objekt blir en struct (eller en klass med getters och setters), nycklar blir medlemmar i snake_case, nästlade objekt blir egna typer, arrayer blir std::vector<T>, heltal blir int64_t, decimaltal blir double, och fält som saknas eller är null i en del av exemplet blir std::optional<T>. Allt paketeras i det namespace du väljer och skrivs ut som en enda header skyddad med #pragma once.

Typinferensen görs av quicktype, som slår ihop alla element i varje array innan en typ väljs. Ett fält som bara finns i vissa poster fångas ändå som valfritt, så att tolkningen av hela svaret inte kastar fel på grund av en saknad nyckel.

Integration med nlohmann/json

Den genererade headern är utformad för nlohmann/json, det mest populära JSON-biblioteket för modern C++. För varje typ definierar den from_json- och to_json-överlagringar som kopplar medlemmarna till de ursprungliga JSON-nycklarna, samt små hjälpfunktioner för valfria värden. När json.hpp finns tillgänglig räcker ett enda anrop till nlohmann::json::parse(text).get<Root>() för att läsa ett dokument, och nlohmann::json j = value; för att skriva tillbaka det. Bocka i Types only om du bara behöver deklarationerna — till exempel för en annan serialiserare — och Use Boost om din verktygskedja inte kan använda C++17.

Tips för produktionskod

Klistra in ett komplett exempel med flera arrayposter och ifyllda valfria fält så att typerna blir korrekta. Tomma arrayer och null faller tillbaka på nlohmann::json, vilket du oftast vill byta ut. Byt namn på rottypen så att den passar din domän, välj ett namespace som passar ditt projekt och kör clang-format på resultatet. Granska heltalens bredd, överväg enum class för strängar med en fast uppsättning värden och tänk på att datum- och tidssträngar förblir std::string, så att du kan tolka dem med det bibliotek du föredrar. All bearbetning sker lokalt, så interna data stannar på din dator.

Hur man använder

  1. Klistra in JSONKlistra in ett JSON-dokument eller klicka på Load sample.
  2. KonfigureraAnge rottypens namn, namespace, struct- eller klassstil och stöd för valfria fält.
  3. Lägg till headernKopiera koden eller ladda ner en .hpp-fil och inkludera den bredvid json.hpp.

Vanliga frågor

Vilket JSON-bibliotek använder den genererade koden?
Den riktar sig mot nlohmann/json. Headern innehåller from_json- och to_json-överlagringar, så nlohmann::json::parse(text).get<Root>() fungerar direkt.
Vilken C++-standard krävs?
C++17 som standard, eftersom valfria fält använder std::optional. Bocka i Use Boost för att använda boost::optional i stället om du sitter fast med en äldre standard.
Kan jag få klasser med getters och setters?
Ja. Ställ in Types på klasser med getters/setters för inkapslade medlemmar, eller behåll vanliga structs för enkla databehållare.
Laddas min JSON upp?
Nej. Headern genereras helt i din webbläsare; ingenting skickas till någon server.
Annons