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
Webpack-configuratiegenerator
Maak een webpack.config.js voor webpack 5 voor gewoon JavaScript, React of Vue: TypeScript, Babel, CSS of Sass, afbeeldingen, HtmlWebpackPlugin, een devserver en de npm install-regel.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
SVG-golfgenerator
Genereer een vloeiende SVG-golfscheiding voor headers en footers met instelbare amplitude, frequentie, kleur en positie boven of onder. Kopieer de SVG-code.
Decimaal naar hexadecimaal converter
Voer een decimaal geheel getal in en ontvang direct de hexadecimale waarde, inclusief negatieve waarden als 64-bits tweecomplement.
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.
Protocol Buffers-decoder
Decodeer Protobuf-bytes lokaal uit hex, Base64, Base64URL, tekst of een bestand, bekijk veldinterpretaties en exporteer een privérapport.
Tool beschikbaar in andere talen
- JSON ke Struktur Go [ID]
- JSON vers Go Struct [FR]
- JSON→Go構造体 [JA]
- JSON para Estrutura Go [PT]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON a Estructura Go [ES]
- JSON을 Go 구조체로 변환 [KO]
- JSON إلى بنية Go [AR]
- JSON thành cấu trúc [VI]
- JSON zu Go Struct [DE]
- JSON till Go-struktur [SV]
- JSON na strukturę Go [PL]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]