Convertir un exemple JSON en types Go

Collez un exemple JSON et l’outil écrit les déclarations de types Go correspondantes : structs, slices, champs scalaires et balises json qui relient chaque champ à sa clé. Les noms suivent les conventions de Go, les objets imbriqués restent en ligne ou deviennent des types nommés, et les formes identiques ne sont déclarées qu’une fois.

La conversion s’exécute dans cet onglet. Rien n’est envoyé et aucune requête n’est faite : la page fonctionne hors ligne et accepte des données que vous ne pouvez pas transmettre à un tiers.

  1. Collez ou saisissez le JSON à modéliser. Le résultat se met à jour pendant la saisie : ajustez l’exemple jusqu’à obtenir les bons types.
  2. Laissez Types imbriqués en ligne coché pour obtenir des structs anonymes dans le parent, ou décochez pour obtenir des types nommés séparés après la déclaration principale.
  3. Si le JSON est mal formé, le message indique la position et le caractère fautif est marqué ; corrigez l’entrée et les types reviennent.
  4. Utilisez Copier le struct Go pour récupérer le code et Effacer pour vider les deux zones. Ajoutez le bloc d’imports vous-même : le résultat ne contient que les déclarations de types.

Comment les types sont déduits et ce que le résultat ne contient pas

Comment les types sont déduits d’un exemple

Les nombres entiers deviennent int s’ils tiennent sur 32 bits, sinon int64 ; les décimales deviennent float64. Un nombre écrit 1.0 reste float64 malgré son apparence entière, et un tableau mêlant entiers et décimales devient []float64. Un tableau qui mélange des valeurs sans type commun — nombre et chaîne, objet et nombre — retombe sur []interface{}.

Un tableau d’objets est fusionné en un seul struct réunissant toutes les clés ; une clé absente de certains éléments reçoit omitempty. Un champ objet dans un élément et scalaire dans un autre devient interface{}. Les chaînes au format horodatage RFC 3339 (2024-05-06T07:08:09Z) deviennent time.Time, ce qui suppose d’ajouter l’import time à la main.

Noms, balises et champs facultatifs

Les noms de champs sont des noms Go exportés : user-id devient UserID, et les sigles courants comme ID, URL, API et HTTP gardent leurs majuscules. La clé d’origine est conservée dans la balise du struct : le code généré correspond toujours au payload collé.

Deux clés qui donnent le même nom Go reçoivent un suffixe numérique (UserID et UserID2), et les clés composées uniquement de symboles deviennent Field, Field2, etc. Les guillemets et les barres obliques inverses d’une clé sont échappés dans la balise pour que le code reste valide.

Ce que le résultat n’est pas

Ce sont uniquement des déclarations : pas de clause package, pas d’imports, pas de méthodes, et rien n’est compilé ici. Les types décrivent l’exemple collé, pas un schéma — un champ null ou absent de cet exemple est typé d’après ce que vous avez fourni ; vérifiez la nullabilité et la largeur des nombres sur un payload plus complet.

Les documents volumineux sont analysés dans le navigateur et limités par la mémoire de votre appareil. Considérez le résultat comme un point de départ à relire : renommez les types, ajoutez ce que l’exemple ne montrait pas, puis passez le fichier au compilateur.

Outils récents :