JSON vers Go est le processus de conversion automatique de données au format JSON en définitions de type struct du langage Go. JSON est le format d'échange de données le plus courant dans les API REST, fichiers de configuration, files de messages et journaux, tandis que Go est un langage fortement typé ; pendant le développement, la structure dynamique de JSON doit souvent être mappée à struct avant la désérialisation avec encoding/json. Écrire des structs manuellement, en particulier les objets imbriqués, conduit facilement à des champs manquants ou des types incorrects ; cet outil vise à automatiser le travail répétitif.
Le struct de Go est un type de données composite, déclaré avec `type Name struct { ... }`. Chaque champ se compose d'un nom et d'un type ; les noms de champ doivent commencer par une majuscule pour être accessibles par d'autres paquets, les soi-disant 'identifiants exportés'. L'outil convertit automatiquement les noms de champ JSON en noms de champ exportés PascalCase, par exemple `user_name` se mappe à `UserName`, avec la clé d'origine préservée dans la balise json.
La conversion de base de cet outil est effectuée par le Web Worker jsonFormat dans le navigateur, appelant le moteur de rendu Go de quicktype-core avec les options `just-types` et `no-comments`. L'ensemble du flux ne dépend pas de services backend : le JSON d'entrée est analysé localement, les types inférés, le code Go généré, finalement présenté dans l'éditeur droit.
L'inférence de type suit le mappage conventionnel JSON vers Go : chaînes mappées à `string`, booléens à `bool`, entiers à `int64`, flottants à `float64`, tableaux à slices `[]T`, objets à structs indépendants, `null` à `interface{}`. Les objets imbriqués sont traités récursivement, en maintenant une hiérarchie claire.
Par rapport à l'écriture manuelle, le code généré par l'outil est une 'première ébauche exécutable'. Les développeurs n'ont généralement qu'à ajuster le nom du type racine, le nom du paquet, la précision du type de champ (par exemple int64 en int) et s'il faut utiliser des types pointeur, avant de les placer dans de vrais projets Go. Combiné avec la copie en un clic et le téléchargement model.go, le travail répétitif dans les phases d'intégration et de modélisation est considérablement réduit.