JSON naar Go-structuur
Plak een JSON-sample en haal de Go-structuurdefinities die deze met encoding/json correct kunnen verwerken. De velden worden geëxporteerd (CamelCase), gemarkeerd met de oorspronkelijke JSON-sleutels, omgezet in pointers wanneer een waarde mogelijk null is, en nestobjecten krijgen hun eigen genoemde structuurdeclaraties.
Hoe je JSON omzet in een Go-structuur
-
1
Plak de JSON
Een enkel monster is voldoende; meerdere monsters verbeteren de inferentie van nullwaarden.
-
2
Kies een naam
Voor geëxporteerde velden geldt PascalCase als de standaardconventie in Go. Kies een afkortingsstijl (bijvoorbeeld `URL` versus `Url` of `ID` versus `Id`).
-
3
Kies een optionele strategie
Gebruik pointers voor nullabele velden (de meest idiomatische manier) of `omitempty`-taggen.
-
4
Kopieer de structuren
Een wortelstructuur met ingebedde structuren. Plaats deze in een `.go`-bestand en selecteer `go build`.
Voorbeelduitvoering
Voor:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Uitvoer:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
Type-mapping
| JSON-waarde | Go-type |
|---|---|
| string | string |
| gehele getal | int of int64 |
| nummer (decimaal) | float64 |
| booleaanse waarde | bool |
| null (met een niet-null broer of zus) | *T (aanwijzer) |
| array | []T |
| object | Genoemde structuur |
| gemengde matrix | []interface{} |
Naamgeving van idiomen die de generator volgt
- Initialismen in hoofdletters:
id→ID,url→URL,api_key→APIKey. Dit sluit aan bij de door Go aanbevolen stijl (en de regels voorgo vet/staticcheck). - Snake_case JSON → PascalCase-velden:
first_name→FirstName. - Enkele woorden in afkortingen behouden:
IPblijftIP;HTTPblijftHTTP. - JSON-tag:
json:"first_name"behoudt de oorspronkelijke sleutel, waardoor de codering en decodering soepel verlopen.
Optionele velden: pointer of omitempty?
| Strategie | Gebruik bij |
|---|---|
pointer (*T) |
U moet ‘afwezig’ onderscheiden van ‘nulwaarde’ |
omitempty |
U wilt alleen nulwaarden overslaan bij het marshalen; unMarshal slaat een nulwaarde op voor ontbrekende waarden |
| Geen van beide | Het veld is altijd aanwezig en nulwaarden zijn betekenisvol |
De generator gebruikt standaard de pointer + omitempty voor waarden die als null worden gezien; instellen op basis van uw semantiek.
Veelvoorkomende fouten
- Gebruik
intwanneer de JSON-integrale waarde groter is dan die vanMaxInt32op een 32-bits-doelplatform. Gebruikint64voor bekende grote waarden. - Omkeer van de ordening en verlies van de belangrijke sleutels:
encoding/jsongenereert sleutels volgens de volgorde van de veldbeschrijvingen, niet volgens de oorspronkelijke JSON-structuur. Sorteer deze handmatig als u een canonische uitvoer nodig hebt. - Arrays met gemengde vormen:
[]interface{}mist de typveiligheid. Overweeg in plaats daarvan unietypen met een discriminatorveld vantype. - Vergeten van
omitemptybij optionele velden: zonder deze wordt het optionele veld niet weggelaten, maar wordt als"foo": nullgeserialiseerd.
Veelgestelde vragen
Gebruik pointers wanneer u moet onderscheiden tussen ‘veld ontbreekt’ en ‘veld is nul’. Gebruik omitempty wanneer de nulwaarde geen geldige zakelijke waarde is ("", 0 en false betekenen altijd ‘vergeet dit’). Veel teams kiezen voor één standaardcode en hanteren deze consistent in hun gehele codebasis.
Elk geneste object wordt een aparte, genoemde structuurdefinitie (bijvoorbeeld User → Address). Typen worden alleen ingelijnd wanneer de geneste structuur klein is en slechts één keer wordt gebruikt; anders krijgt u schone, herbruikbare typen.
Ja. id wordt ID, url wordt URL en api_key wordt APIKey. Dit is wat go vet verwacht en wat de meeste Go-stijlgidsen aanbevelen.
De generator genereert eenvoudige structuren met standaard json:-taggen. Voor aangepaste UnmarshalJSON-implementaties (bijvoorbeeld voor data in niet-ISO-formaten) moeten deze na generatie handmatig worden toegevoegd.
Gerelateerde tools
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
HTML-tekenreferentie
Een doorzoekbare lijst met HTML-entiteiten, hun benoemde en numerieke codes, plus kopiëren met één klik voor speciale tekens en symbolen.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
E-mailvalidator
Valideer een e-mailadres: RFC 5322-syntaxcontrole, live MX-record-zoekopdracht, plus details over lokaal deel, domein en lengte. Er wordt geen e-mail verstuurd.
EditorConfig-generator
Genereer een .editorconfig-bestand met uw regels voor inspringstijl en -grootte, regeleinde, tekenset en witruimte voor consistente opmaak in alle IDE's en editors.
Changelog-generator
Maak een markdown-sectie in Keep a Changelog-stijl op basis van gecategoriseerde items. Plak de items onder Added, Changed, Fixed en Removed, kies Markdown of platte tekst en kopieer de uitvoer.
Tool beschikbaar in andere talen
- JSON을 Go 구조체로 변환 [KO]
- JSON vers Go Struct [FR]
- JSON para Estrutura Go [PT]
- JSON thành cấu trúc [VI]
- JSON→Go構造体 [JA]
- JSON إلى بنية Go [AR]
- JSON zu Go Struct [DE]
- JSON ke Struktur Go [ID]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON a Estructura Go [ES]
- JSON till Go-struktur [SV]
- JSON na strukturę Go [PL]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]