Mode d'emploi
- Collez un objet JSON dans Objet JSON. Le texte entier doit être un seul objet, avec les accolades au début.
- Saisissez un Nom de la struct racine, comme Product, et cochez Ajouter omitempty à chaque balise si vous le souhaitez.
- Lisez Contrôle. Le vert signifie que l'objet est converti ; le rouge indique l'endroit du problème.
- Copiez le Code Go dans un fichier qui a une clause package, ou téléchargez-le sous le nom models.go.
Comment les types Go sont choisis
Chaque valeur JSON reçoit le type Go qui la contient. Une chaîne devient string, et true ou false devient bool. Les règles de lecture d'encoding/json (en anglais) décident de la façon dont le JSON est relu dans ces types.
- Un nombre entier qui tient sur 64 bits devient int64. Un nombre avec un point ou un exposant, comme 1.0 ou 2e3, devient float64, de même qu'un entier trop grand pour int64.
- Un null devient any. Un null placé à côté d'une valeur d'un autre type prend ce type, car un null laisse inchangée une valeur Go d'un autre type.
- Un objet devient une struct, et une liste prend le type que partagent ses éléments. Les objets d'une même liste se fondent en une seule struct, et une liste de types mélangés devient []any.
- Un objet vide devient une struct vide, et une liste vide devient []any.
Noms, balises et conflits
Chaque champ prend son nom du nom JSON : les mots sont réunis et chacun commence par une majuscule, donc user-name devient UserName. La spécification du langage Go (en anglais) exporte un champ dont le nom commence par une majuscule, ce qui explique la majuscule initiale. La balise json garde le nom tel qu'il est écrit, si bien que la même clé est retrouvée lorsque le JSON est relu.
Deux noms qui donnent le même nom Go reçoivent un numéro, comme AB et AB2, et une struct dont le nom est déjà pris reçoit aussi un numéro. Un élément de liste prend son nom de la liste : products donne une struct nommée Product, et un nom sans règle de pluriel reçoit le suffixe Item.
- Un nom qui contient une virgule, un tiret seul ou aucun caractère ne peut pas être une balise json : l'outil nomme cette clé et s'arrête.
- Avec omitempty activé, chaque balise reçoit l'option. L'outil met en majuscule la première lettre du nom de la struct racine, donc product devient Product.
Ce que l'outil n'écrit pas
- Il n'ajoute pas de clause package ni d'imports. Collez le code dans un fichier qui a sa propre clause package.
- Il n'utilise pas de pointeurs pour les champs facultatifs. Un champ absent ou null dans le JSON n'est pas distingué d'un champ qui contient la valeur zéro.
- Il ne transforme pas les noms en sigles usuels de Go : id devient Id. Renommez le champ à la main si votre style de code demande ID.
Exemple détaillé : une commande avec un propriétaire et deux articles
Un objet de commande contient un nombre entier (id), un décimal (ratio), un objet (owner) et une liste de deux objets (items). Le tableau montre le champ Go que devient chaque nom JSON. L'outil écrit les trois structs sous le tableau, avec la struct externe Order en premier.
| Nom JSON | Champ Go | Type Go | Balise |
|---|---|---|---|
| id | Id | int64 | json:"id" |
| ratio | Ratio | float64 | json:"ratio" |
| owner | Owner | Owner | json:"owner" |
| items | Items | []Item | json:"items" |
Questions fréquentes
Pourquoi un nombre entier est-il un int64 et non un int ?
Le type int64 est un entier signé de 64 bits, qui contient tous les entiers de −9 223 372 036 854 775 808 à 9 223 372 036 854 775 807. L'outil l'utilise pour chaque entier qui le permet, si bien qu'une valeur ne déborde pas. Remplacez le type par int à la main si votre code en a besoin.
Pourquoi un null devient-il any ?
Go n'a pas de type qui contienne seul un null, donc l'outil utilise any, qui contient n'importe quelle valeur. Un null à côté d'une valeur d'un autre type prend ce type à la place, car encoding/json laisse inchangée une valeur Go d'un autre type lorsqu'il lit un null.
Pourquoi mon champ s'appelle-t-il Id et non ID ?
L'outil met en majuscule la première lettre de chaque mot et n'applique pas les sigles usuels de Go, donc id devient Id. La balise json reste id, si bien que les données sont lues de la même façon. Renommez le champ si votre style de code demande ID.
Quelle version de Go faut-il pour ce code ?
Le code utilise any pour un null, et any est un alias de interface{} ajouté dans Go 1.18. Si votre code est plus ancien, remplacez any par interface{}, qui est le même type.
Pourquoi l'outil refuse-t-il certains noms ?
Une balise json contient le nom, suivi d'options qui commencent après une virgule, si bien qu'un nom avec une virgule ne peut pas être écrit dans une balise. Une balise d'un seul tiret masque le champ, et ce nom est donc refusé lui aussi.
Le JSON que je colle est-il envoyé quelque part ?
Non. La conversion se fait dans votre navigateur, et rien de ce que vous collez n'est stocké ni envoyé à notre serveur. Ne collez pas un mot de passe ou un jeton dans une page en laquelle vous n'avez pas confiance.
Sources
- Go (en anglais) : encoding/json, Unmarshal rules and struct tags
- Go (en anglais) : The Go Programming Language Specification, numeric types and any
Chiffres et texte vérifiés pour la dernière fois le jeudi 12 novembre 2026.