JSON till Go-struktur

Nästa

Klistra in ett JSON-exempel och få Go-strukturdefinitioner som parsar det rent med encoding/json. Fälten exporteras (CamelCase), taggas med de ursprungliga JSON-nycklarna, omvandlas till pekare när ett värde kan vara null, och nästlade objekt får egna namngivna strukturdeklarationer.

Så konverterar du JSON till en Go-struktur

  1. 1

    Klistra in JSON

    Ett enda exempel räcker. Fler exempel förbättrar slutledningen av nullbara fält.

  2. 2

    Välj namngivning

    För exporterade fält är PascalCase den gängse konventionen i Go. Välj förkortningsstil (`URL` kontra `Url`, `ID` kontra `Id`).

  3. 3

    Välj strategi för valfria fält

    Använd pekare för nullbara fält (mest idiomatiskt) eller `omitempty`-taggar.

  4. 4

    Kopiera strukturerna

    En rotstruktur plus de nästlade. Klistra in i en `.go`-fil och kör `go build`.

Exempel på utdata

För:

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

Utdata:

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

Typmappning

JSON-värde Go-typ
sträng string
heltal int eller int64
tal (decimalt) float64
booleskt värde bool
null (med ett icke-null-syskon) *T (pekare)
array []T
objekt Namngiven struktur
blandad array []interface{}

Namngivningsidiom som generatorn följer

  • Initialismer skrivs med versaler: idID, urlURL, api_keyAPIKey. Detta följer Go:s rekommenderade stil (och reglerna för go vet/staticcheck).
  • snake_case-JSON → PascalCase-fält: first_nameFirstName.
  • Enkelordsakronymer bevaras: IP förblir IP, HTTP förblir HTTP.
  • JSON-tagg: json:"first_name" behåller den ursprungliga nyckeln så att kodningen fungerar rent i båda riktningarna.

Valfria fält: pekare eller omitempty?

Strategi Använd när
Pekare (*T) Du måste skilja på “frånvarande” och “nollvärde”
omitempty Du vill bara hoppa över nollvärden vid marshalning; unmarshalning lagrar noll för saknade värden
Ingetdera Fältet finns alltid och nollvärden är meningsfulla

Generatorn använder som standard pekare + omitempty för allt som ses som null; justera efter din semantik.

Vanliga misstag

  • Att använda int när JSON-heltalet överstiger MaxInt32 på ett 32-bitarsmål. Använd int64 för värden som är kända för att vara stora.
  • Att marshalla tillbaka och förlora nyckelordningen. encoding/json skickar ut nycklar i fältdeklarationsordning, inte i den ursprungliga JSON-ordningen. Sortera manuellt om du behöver en kanonisk utdata.
  • Arrayer med blandad form. []interface{} förlorar typsäkerheten. Överväg i stället unionstyper med ett type-diskriminatorfält.
  • Att glömma omitempty på valfria fält. Utan det serialiseras valfria fält som "foo": null i stället för att utelämnas.

Vanliga frågor

Använd pekare när du behöver skilja mellan “fält saknas” och “fält är noll”. Använd omitempty när nollvärdet inte är ett giltigt affärsvärde ("", 0 och false betyder alltid “hoppa över detta”). Många team väljer ett av alternativen och tillämpar det konsekvent i hela kodbasen.

Varje nästlat objekt blir en separat namngiven strukturdeklaration (t.ex. UserAddress). Typerna infogas inline endast när den nästlade strukturen är mycket liten och används en gång; annars får du rena, återanvändbara typer.

Ja. id blir ID, url blir URL och api_key blir APIKey. Det är vad go vet förväntar sig och vad de flesta Go-stilguider rekommenderar.

Generatorn skapar enkla strukturer med standardtaggar json:. För anpassade UnmarshalJSON-implementeringar (t.ex. för datum i icke-ISO-format) lägger du till dem manuellt efter genereringen.

Relaterade verktyg

Verktyget finns på andra språk