JSON-zu-Go-Struct-Konverter

Fügen Sie ein JSON-Objekt (oder ein JSON-Array) ein, um automatisch die entsprechenden Go-Struct-Definitionen mit json-Tags zu erzeugen.

Tipps zur Nutzung

  • Sind alle Elemente eines Arrays Objekte, werden ihre Schlüssel zu einem einzigen Struct zusammengeführt. Schlüssel, die in manchen Elementen fehlen, erhalten automatisch das json-Tag `omitempty`.
  • Der Name des Wurzeltyps ist standardmäßig "Root", kann aber beliebig geändert werden. Struct-Namen für verschachtelte Objekte werden automatisch erzeugt, indem der Property-Name in PascalCase umgewandelt wird.
  • Ein JSON-null wird als `interface{}` ausgegeben, da Go keinen nativen nullfähigen primitiven Typ kennt. Für eine strengere Behandlung sollte ein Pointer-Typ in Betracht gezogen werden.
  • Die Ausgabe ist ein leicht spaltenausgerichteter Entwurf. Wird sie nach dem Einfügen durch `gofmt` geschickt, richtet sich der Code am Standardstil des Projekts aus.
  • Fügen Sie eine Beispiel-JSON-Antwort Ihrer API unverändert ein, um schnell einen Entwurf des Antwort-Structs für Ihren Go-Code zu erhalten.

Häufig gestellte Fragen

Einen Struct von Hand aus einer Beispielantwort zu schreiben, kostet Zeit und ist fehleranfällig – leicht verrutscht die Umwandlung eines Feldnamens oder ein json-Tag wird vergessen, besonders bei tief verschachtelten Objekten. Die automatische Generierung spart viel Implementierungszeit und vermeidet diese Fehler.

JSON-Schlüssel (in snake_case oder camelCase) werden in PascalCase mit großem Anfangsbuchstaben umgewandelt und so zu exportierbaren Go-Feldnamen. Der ursprüngliche JSON-Schlüssel bleibt unverändert im json-Tag (`json:"ursprünglicher_schlüssel"`) erhalten, sodass Kodierung und Dekodierung weiterhin korrekt funktionieren.

Ein null-Wert wird als Typ `interface{}` ausgegeben. Ein Schlüssel, der nur in manchen Elementen eines Arrays vorkommt, erhält automatisch das json-Tag `omitempty`, doch der Go-Typ selbst nimmt lediglich seinen Nullwert an – ziehen Sie bei Bedarf einen Pointer-Typ in Betracht, um "fehlend" von "null" zu unterscheiden.

Eine JSON-Zahl mit Dezimalpunkt wird als `float64` eingestuft, eine ohne Dezimalpunkt als `int`. Da die JSON-Zahlendarstellung nur die Ziffern erhält, sollten Sie den Typ bei Werten, die groß genug für `int64` sind, nachträglich manuell anpassen.

Da Go keine Union-Typen kennt, fällt ein Schlüssel mit uneinheitlichem Typ über die Elemente hinweg auf `interface{}` zurück. Der tatsächliche Werttyp muss dann zur Laufzeit per Type Assertion ermittelt werden.
ツールくん

Übrigens – warum Go Structs mit json-Tags kombiniert

Go ist eine statisch typisierte Sprache, und beim Arbeiten mit JSON verlässt sich das Paket `encoding/json` der Standardbibliothek auf die Zuordnung zwischen Struct-Feldern und ihren json-Tags, um Daten zu kodieren und zu dekodieren. Einen Struct für die Antwortstruktur einer externen API von Hand zu schreiben, ist eine sich wiederholende Aufgabe, die mit jedem hinzugefügten Feld wächst, und sie taucht in vielen Go-Projekten immer wieder auf.

Dieses Tool analysiert die Struktur eines Beispiel-JSONs und generiert automatisch die passenden Struct-Definitionen samt json-Tags, wodurch diese Wiederholungsarbeit reduziert wird. Ein bekanntes Tool im selben Bereich ist quicktype, das die Umwandlung in Typen mehrerer Sprachen unterstützt; wer aber einfach nur eine Beispiel-API-Antwort einfügen und schnell einen Go-Struct erhalten möchte, profitiert von der Einfachheit eines auf genau diese Aufgabe fokussierten Tools.

Da Go keine Sprachfunktion besitzt, um ein Struct-Feld optional zu machen, ist es üblich, bei JSON-Feldern, die fehlen könnten, entweder `omitempty` zum json-Tag hinzuzufügen oder einen Pointer-Typ (wie `*string`) zu verwenden, um einen Nullwert von "kein Wert vorhanden" zu unterscheiden. Der generierte Struct ist lediglich eine mechanische Ableitung aus der Struktur – Nullable-Verhalten und künftige API-Änderungen sollten daher anhand der tatsächlichen Spezifikation manuell überprüft und angepasst werden, was gängige Praxis ist.