Zum Inhalt springen

JSON in Go-Structs

JSON to Go Structs

Erzeugt aus einem JSON-Beispiel Go-Structs mit json-Tags, verschachtelte und wiederholte Typen eingeschlossen.

Erzeugt aus einem Beispieldokument Go-Structs mit `json:`-Tags, sodass ein Antwort-Body zu etwas wird, in das `encoding/json` unmarshalen kann. Feldnamen sind exportiert und in CamelCase, und der ursprüngliche Schlüssel bleibt im Tag erhalten – der Teil, den man von Hand falsch macht.

🔒 Läuft vollständig in Ihrem Browsergojsoncodegenstruct
Ausgeben als

Beispiel-JSON

Eine .json-Datei ablegen

Wird in diesem Tab gelesen. Nichts wird hochgeladen.

Geben Sie ihm jedes Element, das Sie haben. Jeder weitere Datensatz engt die Vermutung ein – ein Feld, das in einem davon fehlt, ist genau das, was es optional macht.

TypeScript

So funktioniert es

  1. Fügen Sie so viele Datensätze ein, wie Sie haben

    Jedes Element jedes Arrays wird gelesen und zusammengeführt, nicht nur das erste. Drei Datensätze sagen weit mehr als einer, denn ein Feld, das in einem davon fehlt, ist genau das, was dieses Feld optional macht.

  2. Benennen Sie den Wurzeltyp

    Verschachtelte Objekte werden nach dem Schlüssel benannt, der sie enthält, bei Arrays in die Einzahl gesetzt, sodass `users` ein `User` ergibt. Nur die Wurzel braucht einen Namen von Ihnen.

  3. Lesen Sie die Zähler unter der Ausgabe

    Typen, optionale Felder, Unions und wie viele Datensätze zusammengeführt wurden. Ein Union-Zähler über null bedeutet, dass ein Feld in Ihrer Stichprobe zwei verschiedene Arten von Wert hatte – einen Blick wert, bevor Sie das Ergebnis in eine Codebasis einfügen.

  4. Fügen Sie die Structs in ein Package ein

    Felder, die in manchen Datensätzen fehlten, bekommen `,omitempty` im Tag, damit ein Marshal-Hin-und-zurück sie nicht erfindet. Es wird keine package-Zeile ausgegeben – Sie wissen, wohin es geht.

Häufige Fragen

Warum ist jede Zahl `float64`?

Nur wenn die Stichprobe einen Bruchwert hatte. War jede Zahl im Dokument ganzzahlig, wird das Feld als Integer-Typ ausgegeben. Es gibt keine Möglichkeit, eine JSON-`1`, die eine ID ist, von einer JSON-`1`, die ein gerundeter Preis ist, zu unterscheiden, also ist die Stichprobe der einzige Beleg, den es gibt.

Was ist mit einem Feld, das in manchen Datensätzen null ist?

Es wird zu einem Zeigertyp, denn so unterscheidet Go „fehlend oder null“ von „Nullwert“. Das heißt, das Dereferenzieren braucht eine nil-Prüfung – lästig, und der Grund, warum die Alternative (ein einfacher Wert, der stillschweigend als 0 oder "" gelesen wird) schlechter ist.

Kommt es mit einem Schlüssel zurecht, der kein gültiger Go-Bezeichner ist?

Der Feldname wird bereinigt – Trennzeichen entfernt, jeder Teil großgeschrieben –, und der rohe Schlüssel bleibt im `json:`-Tag, der das eigentliche Zuordnen übernimmt. Aus einem Schlüssel `user-id` wird in etwa `UserID` mit `json:"user-id"` daneben.

Werden `time.Time`-Felder erzeugt?

Nein. Ein Zeitstempel in JSON ist ein String, und ihn in `time.Time` zu verwandeln, würde ändern, was das Unmarshalen akzeptiert. Wenn Sie das wollen, ändern Sie den Feldtyp von Hand – `encoding/json` parst RFC 3339 von sich aus in `time.Time`.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.