Aller au contenu

JSON vers structures Go

JSON to Go Structs

Produit des structures Go avec leurs balises json à partir d’un échantillon, types imbriqués et répétés compris.

Génère des structs Go avec des tags `json:` à partir d'un document d'exemple : un corps de réponse devient quelque chose dans quoi `encoding/json` sait désérialiser. Les noms de champs sont exportés et en camel case, et la clé d'origine est conservée dans le tag — c'est la partie que l'on rate à la main.

🔒 Fonctionne entièrement dans votre navigateurgojsoncodegenstruct
Produire

JSON d’exemple

Déposez un fichier .json

Lu dans cet onglet. Rien n’est envoyé.

Donnez-lui tous les éléments dont vous disposez. Chaque enregistrement supplémentaire resserre la déduction : un champ absent de l’un d’eux est précisément ce qui le rend facultatif.

TypeScript

Comment s’en servir

  1. Collez autant d'enregistrements que vous en avez

    Chaque élément de chaque tableau est lu et fusionné, pas seulement le premier. Trois enregistrements en disent bien plus qu'un seul, car un champ absent de l'un d'eux est précisément ce qui rend ce champ facultatif.

  2. Nommez le type racine

    Les objets imbriqués sont nommés d'après la clé qui les porte, mise au singulier pour les tableaux : `users` donne donc un `User`. Seule la racine attend un nom de votre part.

  3. Lisez les décomptes sous la sortie

    Types, champs facultatifs, unions et nombre d'enregistrements fusionnés. Un décompte d'unions supérieur à zéro signifie qu'un champ portait deux sortes de valeurs différentes dans votre échantillon — cela vaut la peine d'y regarder avant de coller le résultat dans une base de code.

  4. Collez les structs dans un package

    Les champs absents de certains enregistrements reçoivent `,omitempty` dans leur tag, pour qu'un aller-retour de sérialisation ne les invente pas. Aucune clause `package` n'est émise — vous savez où cela va.

Questions fréquentes

Pourquoi chaque nombre est-il un `float64` ?

Uniquement quand l'échantillon comportait une valeur décimale. Si tous les nombres du document étaient entiers, le champ est émis avec un type entier. Rien ne permet de distinguer un `1` JSON qui est un identifiant d'un `1` JSON qui est un prix arrondi : l'échantillon est toute la preuve dont on dispose.

Et un champ qui vaut null dans certains enregistrements ?

Il devient un type pointeur, c'est ainsi que Go distingue « absent ou null » de « zéro ». Le déréférencer demande donc un test nil — pénible, et c'est la raison pour laquelle l'autre solution (une valeur simple qui se lit silencieusement 0 ou "") est pire.

Gère-t-il une clé qui n'est pas un identifiant Go valide ?

Le nom du champ est nettoyé — séparateurs supprimés, chaque partie capitalisée — et la clé brute reste dans le tag `json:`, qui est ce qui fait réellement la correspondance. Une clé `user-id` devient quelque chose comme `UserID`, avec `json:"user-id"` à côté.

Des champs `time.Time` sont-ils produits ?

Non. Un horodatage en JSON est une chaîne, et le transformer en `time.Time` changerait ce que la désérialisation accepte. Si vous le voulez, changez le type du champ à la main — `encoding/json` analyse le RFC 3339 en `time.Time` de lui-même.

À alimenter depuis

Ensuite

Ces outils acceptent ce que celui-ci produit : le résultat peut y aller directement.