Ein JSON-Beispiel in Go-Typen umwandeln

Fügen Sie ein JSON-Beispiel ein, und das Werkzeug schreibt die passenden Go-Typdeklarationen: Structs, Slices, skalare Felder und die json-Tags, die jedes Feld an seinen Schlüssel binden. Die Namen folgen den Go-Konventionen, verschachtelte Objekte bleiben wahlweise inline oder werden benannte Typen, und identische Formen werden nur einmal deklariert.

Die Umwandlung läuft in diesem Browser-Tab. Nichts wird hochgeladen, keine Anfrage gesendet; die Seite funktioniert weiter offline und eignet sich für Daten, die Sie nicht an Dritte schicken dürfen.

  1. Fügen Sie das JSON ein oder tippen Sie es ein. Das Ergebnis aktualisiert sich beim Bearbeiten, also kürzen Sie das Beispiel, bis die erzeugten Typen passen.
  2. Lassen Sie Verschachtelte Typen inline aktiviert, um anonyme Structs im Elterntyp zu erhalten, oder deaktivieren Sie die Option, um benannte Typen nach der Hauptdeklaration zu bekommen.
  3. Ist das JSON fehlerhaft, nennt die Meldung die Position und markiert das störende Zeichen; korrigieren Sie die Eingabe, und die Typen erscheinen wieder.
  4. Mit Go-Struct kopieren holen Sie den Code heraus, mit Leeren setzen Sie beide Bereiche zurück. Den Import-Block ergänzen Sie selbst: die Ausgabe enthält nur die Typdeklarationen.

Wie die Typen abgeleitet werden und was der Ausgabe fehlt

Wie die Typen aus einem Beispiel abgeleitet werden

Ganzzahlen werden zu int, wenn sie in 32 Bit passen, sonst zu int64; Dezimalzahlen zu float64. Eine Zahl wie 1.0 bleibt float64, obwohl sie ganzzahlig aussieht, und ein Array aus Ganz- und Dezimalzahlen wird zu []float64. Ein Array mit Werten ohne gemeinsamen Typ — Zahl und Zeichenkette, Objekt und Zahl — fällt auf []interface{} zurück.

Ein Array aus Objekten wird zu einem Struct mit der Vereinigung aller Schlüssel zusammengeführt; ein Schlüssel, der in einigen Elementen fehlt, erhält omitempty. Ein Feld, das in einem Element ein Objekt und in einem anderen ein Skalar ist, wird interface{}. Zeichenketten in der Form eines RFC-3339-Zeitstempels (2024-05-06T07:08:09Z) werden time.Time — dafür muss der Import time von Hand ergänzt werden.

Namen, Tags und optionale Felder

Feldnamen sind exportierte Go-Namen: user-id wird zu UserID, und gängige Abkürzungen wie ID, URL, API und HTTP behalten ihre Großschreibung. Der Originalschlüssel bleibt im Struct-Tag erhalten, sodass der erzeugte Code weiterhin zu Ihrem Payload passt.

Zwei Schlüssel, die denselben Go-Namen ergeben, bekommen ein numerisches Suffix (UserID und UserID2); Schlüssel nur aus Symbolen werden zu Field, Field2 und so weiter. Anführungszeichen und Backslashes im Schlüssel werden im Tag maskiert, damit der Code gültig bleibt.

Was die Ausgabe nicht ist

Es sind nur Deklarationen: keine package-Zeile, keine Importe, keine Methoden und keine Kompilierung an dieser Stelle. Die Typen beschreiben das eingefügte Beispiel, kein Schema — ein Feld, das dort null oder nicht vorhanden ist, wird nach Ihren Daten typisiert. Prüfen Sie Nullbarkeit und Zahlenbreite an einem größeren Payload.

Große Dokumente werden ebenfalls im Browser verarbeitet und sind durch den Speicher Ihres Geräts begrenzt. Behandeln Sie das Ergebnis als Ausgangspunkt zum Prüfen: Typen umbenennen, ergänzen, was das Beispiel nicht zeigen konnte, und die Datei danach durch den Compiler schicken.

Zuletzt verwendet: