So verwenden Sie es
- Fügen Sie ein JSON-Objekt in JSON-Objekt ein. Der gesamte Text muss ein einziges Objekt sein, mit geschweiften Klammern oben.
- Tippen Sie einen Name des äußeren Structs ein, etwa Product, und setzen Sie bei omitempty an jedes Tag anhängen einen Haken, wenn Sie die Option wünschen.
- Lesen Sie Prüfung ab. Grün bedeutet, dass das Objekt umgewandelt wurde; rot nennt die Stelle mit dem Problem.
- Kopieren Sie den Go-Code in eine Datei mit einer package-Klausel oder laden Sie ihn als models.go herunter.
Wie die Go-Typen gewählt werden
Jeder JSON-Wert erhält den Go-Typ, der ihn aufnehmen kann. Eine Zeichenkette wird zu string, und true oder false wird zu bool. Die Unmarshal-Regeln von encoding/json legen fest, wie das JSON in diese Typen zurückgelesen wird.
- Eine ganze Zahl, die in 64 Bit passt, wird zu int64. Eine Zahl mit Komma oder Exponent, etwa 1.0 oder 2e3, wird zu float64, und ebenso eine ganze Zahl, die zu groß für int64 ist.
- Ein null wird zu any. Ein null neben einem Wert eines anderen Typs übernimmt diesen Typ, weil ein null einen Go-Wert eines anderen Typs unverändert lässt.
- Ein Objekt wird zu einem Struct, und eine Liste übernimmt den Typ, den ihre Einträge gemeinsam haben. Objekte in einer Liste werden zu einem Struct zusammengeführt, eine Liste mit gemischten Typen wird zu []any.
- Ein leeres Objekt wird zu einem leeren Struct, eine leere Liste zu []any.
Namen, Tags und Kollisionen
Jedes Feld übernimmt seinen Namen aus dem JSON-Namen: Die Wörter werden zusammengefügt, und jedes beginnt mit einem Großbuchstaben, sodass user-name zu UserName wird. Die Go-Spezifikation exportiert ein Feld, dessen Name mit einem Großbuchstaben beginnt; deshalb wird der erste Buchstabe groß geschrieben. Das json-Tag behält den Namen so, wie er geschrieben wurde, damit derselbe Schlüssel beim Zurücklesen gefunden wird.
Zwei Namen, die denselben Go-Namen ergeben, erhalten eine Zahl, etwa AB und AB2, und ein Struct, dessen Name schon belegt ist, bekommt ebenfalls eine Zahl. Ein Listeneintrag erhält seinen Namen von der Liste: products ergibt einen Struct namens Product, und ein Name ohne Pluralregel bekommt die Endung Item.
- Ein Name mit Komma, ein einzelnes Minuszeichen oder ein Name ohne Zeichen kann kein json-Tag sein, deshalb benennt das Werkzeug diesen Schlüssel und bricht ab.
- Mit omitempty erhält jedes Tag die Option. Das Werkzeug schreibt den Anfangsbuchstaben des äußeren Structs groß, sodass product zu Product wird.
Was das Werkzeug nicht tut
- Es fügt keine package-Klausel und keine Importe hinzu. Fügen Sie den Code in eine Datei ein, die ihre eigene package-Klausel hat.
- Es verwendet keine Zeiger für optionale Felder. Ein Feld, das im JSON fehlt oder null ist, wird nicht von einem Feld unterschieden, das den Nullwert hält.
- Es ersetzt Namen nicht durch die üblichen Abkürzungen von Go, deshalb wird id zu Id. Benennen Sie das Feld von Hand um, wenn Ihr Codestil ID verlangt.
Beispiel: eine Bestellung mit Besitzer und zwei Artikeln
Das JSON hat eine ganze Zahl, eine Dezimalzahl, ein Objekt und eine Liste mit zwei Objekten. Die Tabelle zeigt das Go-Feld, das aus jedem JSON-Namen wird. Das Werkzeug schreibt die drei Structs unter der Tabelle, mit dem äußeren Struct Order zuerst.
| JSON-Name | Go-Feld | Go-Typ | Tag |
|---|---|---|---|
| id | Id | int64 | json:"id" |
| ratio | Ratio | float64 | json:"ratio" |
| owner | Owner | Owner | json:"owner" |
| items | Items | []Item | json:"items" |
Häufig gestellte Fragen
Warum ist eine ganze Zahl ein int64 und kein int?
Der Typ int64 ist eine feste vorzeichenbehaftete 64-Bit-Ganzzahl und hält jede ganze Zahl von -9223372036854775808 bis 9223372036854775807. Das Werkzeug verwendet ihn für jede ganze Zahl, die hineinpasst, damit kein Wert überläuft. Ändern Sie den Typ von Hand in int, wenn Ihr Code das braucht.
Warum wird ein null zu any?
Go hat keinen Typ, der allein einen null-Wert hält. Deshalb verwendet das Werkzeug any, das jeden Wert aufnimmt. Ein null neben einem Wert eines anderen Typs übernimmt stattdessen diesen Typ, weil encoding/json beim Lesen eines null einen Go-Wert eines anderen Typs unverändert lässt.
Warum heißt mein Feld Id und nicht ID?
Das Werkzeug schreibt den Anfangsbuchstaben jedes Wortes groß und wendet die üblichen Abkürzungen von Go nicht an, deshalb wird id zu Id. Das json-Tag lautet weiterhin id, die Daten werden also gleich gelesen. Benennen Sie das Feld um, wenn Ihr Codestil ID verlangt.
Welche Go-Version braucht die Ausgabe?
Die Ausgabe verwendet any für ein null, und any ist ein Alias für interface{}, der mit Go 1.18 eingeführt wurde. Ist Ihr Code älter, ersetzen Sie any durch interface{}, das denselben Typ bezeichnet.
Warum lehnt das Werkzeug manche Namen ab?
Ein json-Tag enthält den Namen, gefolgt von Optionen, die nach einem Komma beginnen. Ein Name mit Komma kann deshalb nicht in einem Tag stehen. Ein Tag mit einem einzelnen Minuszeichen blendet das Feld aus, deshalb wird auch dieser Name abgelehnt.
Wird das JSON, das ich einfüge, irgendwohin gesendet?
Nein. Die Umwandlung läuft in Ihrem Browser, und nichts, was Sie einfügen, wird gespeichert oder an unseren Server gesendet. Fügen Sie kein Passwort und kein Token in eine Seite ein, der Sie nicht vertrauen.
Quellen
- Go (englisch): encoding/json, Unmarshal-Regeln und Struct-Tags
- Go (englisch): Spezifikation der Sprache, numerische Typen und any
Zahlen und Text zuletzt geprüft: Donnerstag, 12. November 2026.