Ce que fait cet outil
Un échantillon JSON devient des structs Go, une par objet.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
type Root struct {
Id int `json:"id"`
FirstName string `json:"firstName"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
Les colonnes sont alignées comme gofmt les aligne — nom, type, tag. Personne ne lit du Go non formaté, et coller ceci dans un fichier puis lancer gofmt ne doit rien changer.
Cet alignement est récent : les champs sortaient séparés par une seule espace. Une petite chose, et c’était quand même une sortie qui ne ressemblait pas au langage dont elle se réclame.
Les noms sont exportés, les clés vivent dans le tag
encoding/json ignore entièrement les champs non exportés : un champ minuscule ne décode rien et n’encode rien, sans un mot. Chaque champ est donc exporté — PascalCase, avec un F devant quand la clé commence par un chiffre (2fa donne F2fa) — et le tag porte la clé d’origine, inchangée.
Deux clés qui produisent le même nom Go — user-name et userName — sont tenues séparées par un suffixe numéroté. Les tags restent distincts : chaque champ correspond toujours à sa propre clé.
omitempty omet plus qu’on ne croit
L’option ajoute ,omitempty à chaque tag. Elle s’applique à l’encodage seulement, et ne distingue pas « absent » de « zéro » : 0, "", false, une tranche vide et une map nulle disparaissent tous de la sortie.
C’est très bien pour un filtre facultatif, et faux pour une note qui peut légitimement valoir zéro. Là où la différence compte, la réponse habituelle est un pointeur — *int — qui encode null pour nil et un vrai 0 sinon.
Les types, et ce qu’un échantillon ne peut pas dire
- Les entiers deviennent
int, pasint64. Sur toute plateforme 64 bits c’est la même chose ; une valeur qui dépasse échoue bruyamment au décodage plutôt que d’être tronquée en silence. nullet les valeurs inconnues deviennentany. Un tableau vide devient[]any, un tableau mêlé aussi, sauf s’il mêle entiers et flottants —[]float64couvre alors les deux.- Aucun champ n’est un pointeur et aucun n’est optionnel, parce qu’un échantillon ne peut pas le montrer. Une clé parfois absente est un
*Tque vous ajoutez, et c’est la première chose à vérifier contre une seconde charge.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.