JSON zu Go-Struct
Wandeln Sie einen JSON-Payload in Go-Structs mit json-Tags um – mit Pointer-Feldern für nullbare Werte und time.Time für Zeitstempel.
Eingabe
Ergebnis
Das Ergebnis erscheint hier.Bevor encoding/json einen Payload unmarshalen kann, brauchen Sie ein Struct dafür, mit Feldnamen im Go-Stil und einem json-Tag, das jedes Feld auf den ursprünglichen Schlüssel zurückführt. Dieses Werkzeug erzeugt sie aus einem Beispiel mit dem Go-Renderer von quicktype: Aus stargazers_count wird StargazersCount mit dem Tag json:"stargazers_count", verschachtelte Objekte werden zu eigenen benannten Structs, und ein Feld, das manchmal null ist, wird zum Pointer, damit null und der Nullwert unterscheidbar bleiben. Die Ausgabe beginnt mit einer package-Klausel und den verwendeten Imports und ist damit eine vollständige Go-Datei; ändern Sie package main in Ihren eigenen Paketnamen, wenn Sie sie in ein Projekt übernehmen.
So arbeitet es
- Feldnamen folgen der Go-Konvention für Initialismen: Aus id wird ID und aus html_url wird HTMLURL, so wie Linter es erwarten.
- Zahlen, die in jedem Beispiel ganzzahlig sind, werden zu int64; ein einziger Wert mit Nachkommastellen macht das Feld zu float64.
- Zeitstempel nach RFC 3339 werden als time.Time typisiert, das encoding/json ohne eigenen Code parst; schalten Sie die Datumserkennung aus, um sie als Strings zu behalten.
- Die Option omitempty ergänzt jedes Tag um ,omitempty, sodass Nullwerte weggelassen werden, wenn Sie das Struct wieder zu JSON marshalen.
Wohin Ihre Daten gehen
Nirgendwohin. Dieses Werkzeug läuft vollständig in Ihrem Browser: Der eingefügte Text wird von der Seite verarbeitet und weder an einen Server übertragen noch protokolliert.
Dieses Tool ist kostenlos und braucht kein Konto. Die Ergebnisse existieren nur in Ihrer geöffneten Seite und werden nirgends gespeichert.
Was es kostet
Dieses Werkzeug ist kostenlos, ohne Anmeldung und ohne Punkte.
Häufige Fragen
- Warum sind manche Felder Pointer?
- Mit einem Pointer unterscheidet Go „fehlt oder null“ vom Nullwert. homepage ist im GitHub-Beispiel bei einem Repository ein String und beim anderen null, also wird daraus *string. Ein einfacher string würde null in einen leeren String verwandeln, und Sie könnten die beiden Fälle nicht mehr auseinanderhalten.
- Warum ist ein Feld als interface{} typisiert?
- Wenn jeder Beispielwert null ist, gibt es keinen Typ, der sich ableiten ließe, also bleibt das Feld interface{}, was alles akzeptiert. Ersetzen Sie es durch den tatsächlichen Typ, sobald Sie ihn kennen, oder nehmen Sie ein Beispiel auf, in dem das Feld gesetzt ist, und erzeugen Sie die Structs neu.
- Ist das dasselbe wie mholt/json-to-go?
- Es erledigt dieselbe Aufgabe – json-to-go von Matt Holt ist das altbewährte Browser-Werkzeug dafür –, aber die Engine hier ist quicktype, die identische Strukturen zu einem Struct zusammenführt und optionale Felder durch den Vergleich von Array-Elementen markiert. Der Ausgabestil ist so ähnlich, dass Structs aus beiden Werkzeugen in dieselbe Codebasis passen.
- Sollte ich omitempty einschalten?
- Nur wenn ein leerer Wert wirklich „weglassen“ bedeutet. Mit omitempty verschwinden false, 0 und der leere String beim Marshalen, sodass eine API, die false von einem fehlenden Feld unterscheidet, Ihre Anfrage anders liest. Bei Structs, in die Sie ausschließlich unmarshalen, ändert das Tag nichts.
Das Open Source dahinter
Dieses Werkzeug läuft auf glideapps/quicktype, veröffentlicht unter Apache-2.0. Wer dasselbe Verhalten im eigenen Programm braucht, greift zu dieser Bibliothek.
glideapps/quicktypeAuch bekannt als
- JSON zu Go Struct
- JSON in Go Struct umwandeln
- Golang Struct Generator
- JSON to Go online
- Go JSON Tags
- JSON in Golang konvertieren