JSON zu Go Struct

Nächste

Fügen Sie ein JSON-Beispiel ein und erhalten Sie Go-Struct-Definitionen, die es sauber mit encoding/json parsen. Felder sind exportiert (CamelCase), mit den ursprünglichen JSON-Schlüsseln getaggt, werden zu Zeigern, wenn ein Wert null sein könnte, und verschachtelte Objekte erhalten ihre eigenen benannten Struct-Deklarationen.

Wie man JSON in Go-Struct konvertiert

  1. 1

    Fügen Sie das JSON ein

    Ein einzelnes Beispiel reicht aus. Mehrere Beispiele verbessern die Nullable-Inferenz.

  2. 2

    Wählen Sie die Benennung

    PascalCase für exportierte Felder ist die Go-Konvention. Wählen Sie den Abkürzungsstil (`URL` vs `Url`, `ID` vs `Id`).

  3. 3

    Wählen Sie die optionale Strategie

    Verwenden Sie Zeiger für nullable Felder (am idiomatischsten) oder `omitempty`-Tags.

  4. 4

    Kopieren Sie die Structs

    Ein Root-Struct plus verschachtelte. Fügen Sie es in eine `.go`-Datei ein und drücken Sie `go build`.

Beispielausgabe

Für:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Ausgabe:

type User struct {
    FirstName string   `json:"first_name"`
    Age       int      `json:"age"`
    Email     *string  `json:"email"`
    Tags      []string `json:"tags"`
}

Typzuordnung

JSON-Wert Go-Typ
Zeichenkette string
Ganzzahl int oder int64
Zahl (Dezimal) float64
Boolescher Wert bool
null (mit nicht-null Nachbar) *T (Zeiger)
Array []T
Objekt Benanntes Struct
gemischtes Array []interface{}

Benennungsidiome, die der Generator befolgt

  • Initialismen in Großbuchstaben: id -> ID, url -> URL, api_key -> APIKey. Dies entspricht dem empfohlenen Stil von Go (und den Regeln von go vet / staticcheck).
  • Snake_case JSON -> PascalCase-Felder: first_name -> FirstName.
  • Einzelwort-Akronyme bleiben erhalten: IP bleibt IP, HTTP bleibt HTTP.
  • JSON-Tag: json:"first_name" behält den ursprünglichen Schlüssel, damit die Kodierung sauber funktioniert.

Optionale Felder: Zeiger oder omitempty?

Strategie Verwenden, wenn
Zeiger (*T) Sie müssen “abwesend” von “Nullwert” unterscheiden
omitempty Sie möchten nur Nullwerte beim Marshaling überspringen; Unmarshal speichert Null für fehlende
Keines Das Feld ist immer vorhanden und Nullwerte sind bedeutungsvoll

Der Generator verwendet standardmäßig Zeiger + omitempty für alles, was als null angesehen wird; passen Sie es basierend auf Ihrer Semantik an.

Häufige Fehler

  • Verwendung von int, wenn die JSON-Ganzzahl MaxInt32 auf einem 32-Bit-Ziel überschreitet. Verwenden Sie int64 für bekannte große Werte.
  • Zurückmarshaling und Verlust der Schlüsselreihenfolge. encoding/json gibt Schlüssel in der Reihenfolge der Felddeklaration aus, nicht in der ursprünglichen JSON-Reihenfolge. Sortieren Sie manuell, wenn Sie eine kanonische Ausgabe benötigen.
  • Gemischte Formate in Arrays. []interface{} verliert die Typensicherheit. Erwägen Sie stattdessen Unionstypen mit einem type-Diskriminatorfeld.
  • omitempty bei optionalen Feldern vergessen. Ohne es serialisieren optionale Felder als "foo": null, anstatt weggelassen zu werden.

Häufig gestellte Fragen

Verwenden Sie Zeiger, wenn Sie “Feld abwesend” von “Feld ist Null” unterscheiden müssen. Verwenden Sie omitempty, wenn der Nullwert kein gültiger Geschäftswert ist ("", 0, false bedeuten immer “überspringen”). Viele Teams wählen eines und wenden es konsistent im gesamten Code an.

Jedes verschachtelte Objekt wird zu einer separaten benannten Struct-Deklaration (z. B. User -> Address). Typen werden nur inline verwendet, wenn das verschachtelte Struct klein und einmalig verwendet wird; andernfalls erhalten Sie saubere, wiederverwendbare Typen.

Ja. id wird zu ID, url wird zu URL, api_key wird zu APIKey. Das erwartet go vet und was die meisten Go-Stilrichtlinien empfehlen.

Der Generator gibt einfache Structs mit Standard-json:-Tags aus. Für benutzerdefinierte UnmarshalJSON-Implementierungen (z. B. für Daten in nicht-ISO-Formaten) fügen Sie diese manuell nach der Generierung hinzu.

Verwandte Tools

Tool in anderen Sprachen verfügbar