Aller au contenu

Convertir JSON en structures Go

Génère des définitions de struct Go à partir de JSON avec un portage de json-to-go, formatées par gofmt. Les clés deviennent des champs exportés en CamelCase avec des tags json:"..." ; les objets imbriqués deviennent des structs anonymes inline et null devient any.

Écrire une struct pour faire un json.Unmarshal de la réponse d’une API REST tierce.

Quand l’utiliser

  • Écrire une struct pour faire un json.Unmarshal de la réponse d’une API REST tierce.
  • Amorcer les types de requête et de réponse d’un handler HTTP Go à partir de payloads d’exemple.

Mode d’emploi

  1. Collez un objet ou un tableau JSON dans l’éditeur de gauche.
  2. Lisez la struct générée ; le type racine s’appelle toujours AutoGenerated.
  3. Copiez-la dans votre package, renommez le type et extrayez les structs inline en types nommés si vous les réutilisez.

JSON

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

Struct Go

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"`
}

Détails et limites

La génération s’exécute dans le navigateur. Il n’y a pas de paramètres pour le nom du type, les structs inline ou nommées, ni les tags.

Les sigles sont mis en majuscules (id devient ID) et le snake_case devient CamelCase, la clé d’origine étant conservée dans le tag json.

Les nombres entiers deviennent int (int64 s’ils sont grands), les décimaux float64. null, les tableaux vides et les tableaux mixtes deviennent any ou []any.

Quand les objets d’un tableau diffèrent, les clés absentes de certains reçoivent ,omitempty.

FAQ

Puis-je convertir un tableau JSON à la racine ?

Oui. Cela produit type AutoGenerated []struct{...}, en fusionnant les champs de tous les objets du tableau.

Pourquoi mon champ null est-il typé any ?

Une valeur null ne porte aucune information de type. Remplacez any par un pointeur comme *string ou *time.Time pour conserver la prise en charge de nil.

Génère-t-il des structs imbriquées nommées ?

Non. Les objets imbriqués sont des structs anonymes inline. Déplacez-les manuellement vers des types nommés si vous devez y faire référence.

Spécifications et références