Naar de inhoud

JSON naar Go-structs omzetten — Numio

Genereert Go-struct-definities van JSON met behulp van een json-to-go-poort, geformatteerd met gofmt. Sleutels worden geëxporteerd CamelCase-velden met json:"..." tags; geneste objecten worden inline anonieme structuren en nul wordt willekeurig.

Een struct naar json schrijven. Een REST API-antwoord van derden verwijderen.

JSON

Wanneer gebruik je dit?

  • Een struct naar json schrijven. Een REST API-antwoord van derden verwijderen.
  • Opstartverzoek- en antwoordtypen voor een Go HTTP-handler uit voorbeeldpayloads.

Hoe werkt het

  1. Plak een JSON-object of array in de linkereditor.
  2. Lees de gegenereerde structuur; het roottype heet altijd AutoGenerated.
  3. Kopieer het naar uw pakket, hernoem het type en extraheer inline-structuren in benoemde typen als u ze opnieuw gebruikt.

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go-struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

Details en beperkingen

Generatie draait in de browser. Er zijn geen instellingen voor de typenaam, inline versus benoemde structs of tags.

Initialismen worden met hoofdletters geschreven (id wordt ID) en snake_case wordt CamelCase, waarbij de originele sleutel in de json-tag wordt bewaard.

Hele getallen worden int (int64 als ze groot zijn), decimalen zweven64. null, lege arrays en gemengde arrays worden any of []any.

Wanneer objecten in een array verschillen, krijgen sleutels die bij sommige ontbreken, een omzeiling.

FAQ

Kan ik een JSON-array in de root converteren?

Ja. Het produceert het type AutoGenerated []struct{...}, waarbij de velden van alle objecten in de array worden samengevoegd.

Waarom is mijn nulveld getypt?

Een nulwaarde bevat geen type-informatie. Vervang deze door een pointer zoals *string of *time. Tijd om geen ondersteuning te behouden.

Genereert het benoemde geneste structuren?

Nee. Geneste objecten zijn inline anonieme structuren. Verplaats ze handmatig naar benoemde typen als u ernaar moet verwijzen.

Specificaties en referenties