Convertisseur JSON vers struct Go
Transformez une charge utile JSON en structs Go avec balises json, champs pointeurs pour les valeurs nullables et time.Time pour les horodatages.
Entrée
Résultat
Le résultat apparaîtra ici.Avant qu’encoding/json puisse désérialiser une charge utile, il vous faut une struct correspondante, avec des noms de champs à la manière de Go et une balise json qui relie chacun d’eux à la clé d’origine. Cet outil les génère à partir d’un échantillon avec le moteur de rendu Go de quicktype : stargazers_count devient StargazersCount avec la balise json:"stargazers_count", les objets imbriqués deviennent des structs nommées à part entière, et un champ parfois null devient un pointeur afin que null et la valeur zéro restent distincts. La sortie commence par une clause package et les imports qu’elle utilise, c’est donc un fichier Go complet ; remplacez package main par le nom de votre propre paquet lorsque vous l’ajoutez à un projet.
Comment ça marche
- Les noms de champs suivent la convention Go sur les sigles : id devient ID et html_url devient HTMLURL, comme l’attendent les linters.
- Les nombres entiers dans tous les échantillons deviennent int64 ; une seule valeur décimale fait passer le champ en float64.
- Les horodatages RFC 3339 sont typés time.Time, qu’encoding/json analyse sans code personnalisé ; désactivez la détection des dates pour les garder en chaînes.
- L’option omitempty ajoute ,omitempty à chaque balise, de sorte que les valeurs zéro sont omises lorsque vous resérialisez la struct en JSON.
Où vont vos données
Nulle part. Cet outil s’exécute entièrement dans votre navigateur : le texte collé est traité par la page, jamais transmis à un serveur ni consigné dans un journal.
Cet outil est gratuit et ne demande aucun compte. Ses résultats n’existent que dans la page ouverte et ne sont enregistrés nulle part.
Ce que ça coûte
Cet outil est gratuit, sans connexion ni points.
Questions fréquentes
- Pourquoi certains champs sont-ils des pointeurs ?
- Un pointeur est la façon dont Go distingue « absent ou null » de la valeur zéro. homepage dans l’exemple GitHub est une chaîne pour un dépôt et null pour l’autre, il devient donc *string. Une simple string transformerait null en chaîne vide, et vous ne pourriez plus distinguer les deux cas.
- Pourquoi un champ est-il typé interface{} ?
- Lorsque toutes les valeurs de l’échantillon sont null, il n’y a aucun type à déduire, le champ reste donc interface{}, qui accepte n’importe quoi. Remplacez-le par le vrai type une fois que vous le connaissez, ou incluez un échantillon dans lequel le champ est renseigné et relancez la génération.
- Est-ce la même chose que mholt/json-to-go ?
- Il fait le même travail — json-to-go de Matt Holt est l’outil de navigateur historique pour cela — mais le moteur ici est quicktype, qui fusionne les formes identiques en une seule struct et marque les champs facultatifs en comparant les éléments des tableaux. Le style de sortie est suffisamment proche pour que les structs de l’un ou l’autre s’intègrent à la même base de code.
- Dois-je activer omitempty ?
- Seulement si une valeur vide signifie vraiment « à omettre ». Avec omitempty, false, 0 et la chaîne vide disparaissent à la sérialisation, donc une API qui distingue false d’une valeur manquante lira votre requête différemment. Pour des structs dans lesquelles vous ne faites que désérialiser, la balise ne change rien.
L’open source derrière
Cet outil fonctionne grâce à glideapps/quicktype, publié sous licence Apache-2.0. Si vous avez besoin du même comportement dans votre propre programme, c’est cette bibliothèque qu’il faut utiliser.
glideapps/quicktypeAussi appelé
- json vers go
- json vers struct go
- générateur struct golang
- convertir json en struct go
- balises json go
- json en golang en ligne