Was das Tool macht
Der JSON-zu-Go-Konverter liest ein JSON-Beispiel und schreibt Go-Struct-Definitionen mit json-Tags, bereit für encoding/json. Fügen Sie eine Antwort der API ein, die Sie aufrufen, und erhalten Sie Typen, die Sie sofort mit json.Unmarshal verwenden können, ohne jedes Feld und jeden Tag von Hand zu schreiben.
Der Konverter prüft jeden Wert im Beispiel. Verschachtelte Objekte werden zu eigenen Structs, alle Elemente eines Arrays werden zu einem Elementtyp zusammengeführt, und Felder, die in manchen Elementen fehlen oder manchmal null sind, werden als optional erkannt. Die Ausgabe ist so ausgerichtet, wie gofmt sie formatieren würde.
So funktioniert es
- Fügen Sie JSON in das Eingabefeld ein, laden Sie eine
.json-Datei hoch oder klicken Sie auf Beispiel. - Legen Sie den Namen des Wurzeltyps fest und wählen Sie, wie verschachtelte Objekte geschrieben werden, welche Felder
omitemptybekommen und ob nullbare Felder Zeiger verwenden. - Kopieren Sie den Go-Code oder laden Sie ihn als
.go-Datei herunter und ergänzen Sie Ihrepackage-Zeile.
Ungültiges JSON wird mit Zeile und Spalte des Fehlers gemeldet.
Beispiel
Dieses JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
wird zu diesen Structs:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
Tipps
- Ein einzelnes Beispiel zeigt nur, was es enthält. Kann ein Wert eine Zahl oder ein String sein, nehmen Sie beides auf oder packen Sie mehrere Beispiele in ein Array, damit sie zusammengeführt werden.
- Zeitstempel kommen als Strings an. Ändern Sie den Typ selbst in
time.Time, wenn das Format RFC 3339 ist. - Objekte mit genau denselben Feldern teilen sich ein Struct, was die Ausgabe kurz hält, wenn dieselbe Form an mehreren Stellen vorkommt.
- Schreiben Sie auch TypeScript? Der JSON-zu-TypeScript-Generator nutzt dieselbe Ableitung für Interfaces.
FAQ
› Wie werden die Feldnamen gewählt?
Jeder JSON-Schlüssel wird zu einem exportierten Go-Namen in PascalCase, gängige Abkürzungen werden wie von golint erwartet großgeschrieben, aus user_id wird also UserID und aus avatar_url AvatarURL. Der ursprüngliche Schlüssel bleibt im json-Tag erhalten, sodass encoding/json die Felder exakt zuordnet.
› Welche Go-Typen werden verwendet?
Strings werden zu string, ganze Zahlen zu int (oder int64, wenn ein Wert nicht in 32 Bit passt), Dezimalzahlen zu float64 und Wahrheitswerte zu bool. Arrays werden zu Slices, leere Objekte zu map[string]any und Werte, die nur null sind oder mehrere Arten mischen, zu any.
› Was ist der Unterschied zwischen benannten und eingebetteten Structs?
Der benannte Modus schreibt jedes verschachtelte Objekt als eigenen Typ, etwa Address oder Order, was Wiederverwendung und Tests erleichtert. Der eingebettete Modus setzt anonyme Struct-Typen direkt in den Elterntyp und hält alles in einer Deklaration, wie es viele schnelle Konverter tun.
› Wann wird omitempty hinzugefügt?
Standardmäßig nur bei optionalen Feldern, also solchen, die in manchen Objekten eines Arrays fehlen oder manchmal null sind. Sie können es auch allen Feldern oder keinem geben. Schalten Sie Zeiger ein, um einen fehlenden oder null-Wert von einem Nullwert zu unterscheiden.
› Wird mein JSON hochgeladen?
Nein. Die Structs werden in Ihrem Browser erzeugt, und nichts wird an einen Server gesendet.