Typgenerierung

JSON zu GoModelle aus tatsächlichen Antworten ableiten

Vergleiche beide Beispieldatensätze. Die Ausgabe enthält die Paketdeklaration und nur die benötigten Imports.

JSON zu Go

JSON-Eingabe

Analyse und Generierung erfolgen im Browser. Eingaben werden weder hochgeladen noch gespeichert.

Go-Ergebnis

Generierungsoptionen

Zahlen in any benötigen Decoder.UseNumber(). Pointer unterscheiden fehlend und null nicht.

3 Deklarationen · 2 Pointertypen

JSON zu Go erstellt einen Modellentwurf aus API-Antworten. Mehrere Datensätze in einem Array zeigen, welche Felder fehlen, null enthalten oder ihren Typ wechseln.

Ein Beispiel belegt weder Pflichtfelder noch Geschäftsregeln. Prüfe die Ausgabe anhand des Schnittstellenvertrags und teste sie in deinem Projekt.

Warum JSON zu Go verwenden?

Alle Datensätze berücksichtigen

JSON zu Go untersucht jedes Element an derselben Array-Position. Auch ein Feld, das erst im zweiten Datensatz vorkommt, bleibt erhalten. Bekannte Typen können bei fehlenden oder null-Werten Pointer erhalten.

Zwei Datensatzkarten mit unterschiedlichen Feldern führen zu einer gemeinsamen Struktur; hohle Marker zeigen fehlende Werte.

Zahlen vor der Typwahl nicht runden

Einfache Ganzzahlentokens im int64-Bereich werden int64. Dezimalzahlen, Exponenten und größere Ganzzahlen werden json.Number. Die Auswahl läuft nicht über eine vorherige JavaScript-Gleitkommaumwandlung.

Eine lange Folge von Zahlenblöcken gelangt vollständig in gleich lange Felder einer Ausgabestruktur.

Den Entwurf vor dem Export prüfen

01

Aussagekräftige Varianten sammeln

Fasse Datensätze derselben Antwortform in einem Array zusammen. Ähnliche Objekte an verschiedenen Eigenschaftspositionen erhalten unabhängige Go-Strukturen.

02

Nur begründete Ableitungen aktivieren

Deaktiviere die Datumserkennung für unveränderten Zeittext. Ohne benannte verschachtelte Typen entstehen Inline-Structs. Ohne json-Tags geht die Zuordnung zu Originalschlüsseln verloren.

03

Mit aktuellen Optionen neu erzeugen

Automatik wartet 350 ms nach einer Änderung. Ausgeschaltet erscheint Erzeugen; Ctrl/Cmd+Enter funktioniert ebenfalls. Änderungen sperren den Export, bis ein aktuelles Ergebnis erfolgreich vorliegt.

Feldnamen, Nullwerte und Zahlen

Exportierte Namen und Schlüssel

Der Go Struct Konverter bildet snake_case und camelCase auf exportierte ASCII-Namen ab. Kürzel wie ID bleiben groß; Kollisionen erhalten feste Zahlensuffixe. Aktivierte Tags bewahren unterstützte Originalschlüssel.

Pointer mit konkreter Typgrundlage

Bekannte skalare Werte und Structs erhalten bei null oder fehlenden Feldern standardmäßig Pointer. Slices und Maps können bereits nil sein. Ausschließlich null ergibt any; Pointer unterscheiden einen Nullwert nicht von einem fehlenden Feld.

Zahlenschreibweise ernst nehmen

Nur einfache Ganzzahlentokens innerhalb des vorzeichenbehafteten 64-Bit-Bereichs werden int64. Auch 1.0 und 1e3 werden json.Number, da encoding/json sie nicht direkt in Integer dekodiert. Prüfe Konvertierungsfehler vor Berechnungen.

Zeitwerte und verschachtelte Typen

Vollständige gültige RFC3339-Zeitstempel mit höchstens neun Nachkommastellen können time.Time werden. Alle nichtleeren String-Beispiele an dieser Position müssen passen. Nichtobjekt-Wurzeltypen sind Aliase und behalten die Methoden des Ursprungstyps.

Grenzen und Kompatibilität

Quelltext für Go-Projekte
Ziel ist Go 1.18+ mit any und v1-kompatiblen encoding/json-Tags. Es entstehen keine eigenen Decoder, Validatoren, omitempty-Regeln oder Schema-Konvertierungen. Führe gofmt und Tests in deinem Projekt aus.
Nicht jeder Schlüssel passt in Tags
Leere Schlüssel, Kommas, Anführungszeichen, Backslashes, Backticks, Steuerzeichen und Emoji erzeugen bei aktivierten Tags einen Pfadfehler. Verwende eine Map oder einen eigenen Decoder. Der Schlüssel - erhält das Tag -, und wird dadurch nicht ignoriert.
Generische Positionen brauchen Decoder-Optionen
Gemischte Typen ergeben any, leere Arrays []any und leere Objekte map[string]any. Nutze Decoder.UseNumber() für Zahlen an diesen Positionen; der Standarddecoder verwendet sonst float64. Die Typgenerierung ändert diese Voreinstellung nicht.
Zeittext ist nicht unverändert rückführbar
Ungültige Daten, reine Datumswerte, fehlende Zeitzonen und mehr als neun Nachkommastellen bleiben string. time.Time kann bei erneuter Kodierung Zeitzonen und abschließende Nullen normalisieren. Für exakten Originaltext die Erkennung deaktivieren.
Strikte Syntax und feste Budgets
Kommentare, doppelte Schlüssel, abschließende Kommas und mehrere Dokumente werden abgewiesen. Kein URL-Abruf, Dateiimport oder Reparieren. Grenzen: 500.000 Eingabezeichen, Tiefe 100, 50.000 Knoten, 1.000 Deklarationen und 1.000.000 Ausgabezeichen.

Fragen zu JSON zu Go

Wie entstehen exportierte Feldnamen aus JSON-Schlüsseln?

Die Namen beginnen mit einem ASCII-Großbuchstaben. Übliche Kürzel bleiben erhalten; Kollisionen erhalten Zahlen. Unterstützte Originalschlüssel werden über Tags zugeordnet. Ohne Tags kann die automatische Namenszuordnung beim Dekodieren abweichen.

Welchen Typ erhalten fehlende oder null-Felder?

Ein bekannter Skalar- oder Struct-Typ erhält standardmäßig einen Pointer. Ausschließlich null ergibt any; Slices und Maps sind schon nil-fähig. Fehlend und explizit null bleiben bei Pointern derselbe Zustand.

Wie werden Ganzzahlen und Dezimalzahlen unterschieden?

Einfache Ganzzahlenschreibweise im int64-Bereich ergibt int64. Dezimalzahlen, Exponenten und größere Zahlen ergeben json.Number. Für Zahlen in any ist Decoder.UseNumber() separat nötig.

Was wird aus einem Feld mit wechselnden Typen im Array?

Unvereinbare Typen an derselben Position werden any. Alle Elemente tragen zur Analyse bei, sodass auch ein späterer Typwechsel sichtbar wird. Ein einzelner Datensatz kann solche Abweichungen nicht belegen.

Was spart die automatische Struct-Generierung?

JSON zu Go übernimmt den Entwurf exportierter Namen, Tags und verschachtelter Deklarationen. Pflichtbedingungen und Geschäftslogik musst du selbst ergänzen. Prüfe das Modell mit realen Antworten, bevor du dich darauf verlässt.

Fehlt ein wichtiger Inferenzfall?

Eine echte Antwort prüfen

Nutze JSON zu Go mit mehreren repräsentativen Datensätzen und prüfe Pointer, Zahlen und Zeitwerte vor dem Export.