logo
GeekFormat

JSON vers Go

Collez JSON à gauche, et les définitions de type struct Go prêtes à être utilisées directement dans les projets Go sont générées automatiquement à droite. Traitement local pur dans le navigateur, aucune inscription ni téléchargement requis.

Recommandations connexes

À propos de JSON vers Go : Transformer JSON en struct fortement typé de Go

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.

Cas d'utilisation

  • Le développement backend Go convertit le JSON de réponse d'API REST en struct, se lie directement aux paramètres de gestionnaire Gin/Echo/Fiber avec json.Unmarshal
  • Pendant l'intégration frontend-backend, prend le JSON de réponse d'exemple de Postman, génère rapidement un modèle Go pour réduire la saisie manuelle des champs
  • Lors de l'intégration de callbacks Webhook tiers, convertit le JSON payload en struct Go pour un accès et une validation pratiques au niveau du champ
  • Convertit les fichiers de configuration JSON de Viper/Consul/Nacos en types Go, remplaçant l'accès faiblement typé map[string]interface{}
  • Les équipes de microservices unifient la structure de requête/réponse pour les interfaces gRPC/HTTP, convertit le JSON d'exemple en types Go partagés
  • Les ingénieurs de test convertissent le fixture JSON en struct Go, utilisent avec testify pour des tests pilotés par assertions
  • DevOps analyse les lignes de journal JSON collectées par ELK/Fluentd, génère struct pour l'analyse structurée avec des programmes Go
  • Après que les crawlers ont extrait des données JSON, convertit en struct Go, travaille avec gorm/gen ou ent pour générer des modèles de base de données
  • Les données de télémétrie JSON rapportées par les appareils IoT se convertissent en struct Go, désérialisation et filtrage dans les programmes de passerelle périphérique
  • Convertit les messages JSON consommés de Kafka/NATS/RabbitMQ en types Go, pour l'implémentation de consommateur piloté par événements
  • Les développeurs SDK convertissent le JSON de réponse d'exemple du serveur en struct Go, écrivent dans le paquet types de la bibliothèque client pour référence des utilisateurs
  • Convertit le JSON d'exemple de la documentation Swagger/OpenAPI en struct Go comme exemples de code de documentation d'interface
  • Étudiants ou instructeurs convertissent le JSON d'exemple en struct pendant les cours Go, démontrent le système de types de Go et l'utilisation des balises json
  • Les scripts de migration de données convertissent les lignes JSON exportées de MySQL/PostgreSQL en struct Go, pour le mappage de champs et la validation de types
  • Le JSON de configuration CI/CD se convertit en struct Go, pratique pour la lecture de configuration fortement typée dans les outils de pipeline écrits en Go
  • Les projets hérités refactorisent le code de lecture JSON dynamique basé sur map en accès fortement typé basé sur struct

Comment utiliser

  1. Collez le contenu JSON dans l'éditeur gauche, ou glissez-déposez des fichiers .json/.txt, ou cliquez sur 'Exemple' pour charger des données intégrées.
  2. Attendez environ 400ms, l'outil convertira automatiquement et affichera le code struct Go généré à droite.
  3. Si JSON a des erreurs, cliquez sur le bouton 'Réparer JSON' pour corriger automatiquement les erreurs de format courantes puis continuez la génération.
  4. Vérifiez la sortie droite, cliquez sur 'Copier' pour coller dans le projet Go, ou cliquez sur 'Télécharger' pour sauvegarder en tant que fichier model.go.

Fonctionnalités

  • Génération de struct Go locale dans le navigateur : l'analyse JSON et la génération de code Go se terminent dans le navigateur, les données brutes ne sont pas téléchargées vers le serveur
  • Conversion automatique avec debounce de 400ms : aucun clic manuel nécessaire après collage ou modification, le code Go copiable s'affiche en temps réel à droite
  • Inférence de type intelligente : chaînes mappées à string, booléens à bool, entiers à int64, flottants à float64, tableaux à slices, objets à structs
  • Expansion automatique des objets imbriqués : génère récursivement des types struct indépendants, en maintenant une hiérarchie JSON claire
  • Balises json générées automatiquement : les champs sont fournis avec des balises `json:"nom_original"`, prêtes à être utilisées avec encoding/json
  • Réparation d'erreur JSON en un clic : gère automatiquement les virgules finales, guillemets simples, guillemets manquants et autres erreurs de format courantes, continue la génération après réparation
  • Prend en charge l'entrée coller/télécharger/exemple : glisser-déposer des fichiers .json/.txt, ou charger des exemples intégrés
  • Copie et téléchargement en un clic : copiez tout le code Go dans le presse-papiers, ou téléchargez-le en tant que fichier model.go directement dans le projet
  • Historique d'entrée localStorage : enregistre automatiquement les entrées récentes, récupération rapide après actualisation ou fermeture accidentelle de la page
  • Éditeur à écran partagé réactif : largeur de panneau gauche/droite ajustable, visualisation d'entrée/sortie confortable sur bureau et mobile

Exemples de code

Désérialiser JSON avec struct généré

go

Après avoir copié le struct généré dans le projet, désérialisez directement la réponse d'API avec encoding/json.

package main

import (
    "encoding/json"
    "fmt"
)

// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
    ID      int64    `json:"id"`
    Name    string   `json:"name"`
    Tags    []string `json:"tags"`
    Address Address  `json:"address"`
}

type Address struct {
    City string `json:"city"`
}

func main() {
    data := []byte(`{
        "id": 1,
        "name": "Alice",
        "tags": ["admin", "dev"],
        "address": {"city": "Beijing"}
    }`)

    var u User
    if err := json.Unmarshal(data, &u); err != nil {
        panic(err)
    }

    fmt.Println(u.Name, u.Address.City)
}

Gérer JSON avec des champs potentiellement manquants

go

Si certains champs d'API peuvent ne pas exister, changez les champs correspondants en types pointeur ou utilisez avec la balise omitempty.

package main

import "encoding/json"

// 手动将字段改为指针,缺失时值为 nil
type User struct {
    ID      *int64  `json:"id,omitempty"`
    Name    *string `json:"name,omitempty"`
    Email   *string `json:"email,omitempty"`
}

func main() {
    data := []byte(`{"id": 1, "name": "Bob"}`)
    var u User
    json.Unmarshal(data, &u)
    if u.Email == nil {
        println("Email 字段缺失")
    }
}

FAQ

Comment convertir JSON en struct Go ?

Collez le contenu JSON dans la zone de saisie gauche, et l'outil convertira automatiquement en 400ms et affichera le struct Go généré à droite. Vous pouvez également glisser-déposer des fichiers .json/.txt, ou cliquer sur 'Exemple' pour charger des données intégrées. Après conversion, copiez ou téléchargez le fichier model.go en un clic.

Le code Go généré inclut-il des balises json ?

Oui. L'outil génère du code Go basé sur quicktype-core, et par défaut chaque champ struct est fourni avec une balise `json:"nom_original"`, pratique pour la sérialisation et la désérialisation directes avec Unmarshal/Marshal d'encoding/json.

Les tableaux JSON seront-ils convertis en slices Go ?

Oui. Les tableaux JSON génèrent des types de slice correspondants basés sur les types d'éléments, par exemple `["a","b"]` génère `[]string`, `[1,2,3]` génère `[]int64`, `[{...},{...}]` génère des types personnalisés comme `[]UserItem`.

Les objets imbriqués généreront-ils plusieurs structs ?

Oui. Chaque objet imbriqué génère récursivement un type struct indépendant, nommé en PascalCase. Par exemple, l'objet `address` génère un struct `Address`, référencé dans le struct principal via le champ `Address Address`.

Quel type les valeurs null génèrent-elles ?

Les valeurs null dans JSON sont généralement inférées comme `interface{}`, qui est le type de secours sûr. Si vous connaissez le type réel du champ, vous pouvez ajouter une valeur d'exemple dans JSON, régénérer, puis ajuster manuellement au type spécifique.

Puis-je personnaliser le nom du struct racine ?

Oui. L'outil utilise le nom de type racine (comme User) par défaut ; après avoir modifié le nom de type racine dans les paramètres, tous les noms de sous-types associés se mettent à jour de manière synchrone, le nom du fichier téléchargé change également en conséquence.

Que faire si JSON a des erreurs de format ?

L'outil détecte automatiquement la validité JSON. Si des erreurs courantes comme les virgules finales, guillemets simples, guillemets manquants existent, un bouton 'Réparer JSON' apparaît. En cliquant, l'outil tentera une réparation automatique et régénérera le struct Go ; en cas d'échec de réparation, l'emplacement précis de l'erreur est indiqué.

Les données seront-elles téléchargées vers le serveur ? Est-ce privé et sécurisé ?

Non. Toute l'analyse JSON, l'inférence de type et la génération de code Go se terminent dans votre navigateur via Web Worker ; le contenu saisi et le code généré ne sont jamais téléchargés vers aucun serveur, ni enregistrés dans le cloud. Le JSON sensible contenant des clés API, tokens ou données métier peut être utilisé en toute sécurité.

Le code généré peut-il être placé directement dans des projets Go ?

Oui. Le code généré est un struct Go standard avec des balises json, peut être copié directement dans le répertoire types/ ou models/ du projet. Nous recommandons d'ajuster les noms de type et les noms de paquet selon les conventions de nommage du projet.

Cet outil est-il gratuit ? Dois-je m'inscrire ?

Complètement gratuit, aucune inscription ni connexion requise. Ouvrez la page et utilisez-la immédiatement, aucune limite de fonctionnalités, filigranes ni connexion obligatoire.

Quelle taille de fichiers JSON est prise en charge ?

L'outil n'a pas de limite stricte de taille de fichier, mais la vitesse de conversion et les performances de rendu dépendent des performances du navigateur et de l'appareil. Nous recommandons de traiter JSON dans les 1MB pour la meilleure expérience ; pour JSON surdimensionné, traitez d'abord avec le formateur JSON ou l'outil de division.

Les types numériques généreront-ils uniformément float64 ?

Non. L'outil distingue les entiers et les flottants : les champs entiers génèrent int64, les champs flottants génèrent float64. Si vous préférez des types plus spécifiques comme int, uint64, remplacez manuellement après génération.

Dépannage

Le côté droit affiche 'Veuillez saisir des données JSON'

La zone de saisie gauche est vide ou ne contient que des espaces blancs. Veuillez coller du JSON valide, ou cliquer sur 'Exemple' pour charger des données, ou glisser-déposer des fichiers .json/.txt.

Affiche un échec d'analyse JSON mais ne trouve pas l'emplacement de l'erreur

Cliquez sur le bouton 'Réparer JSON' sous la zone de saisie ; l'outil tentera automatiquement de réparer les virgules finales, guillemets simples, guillemets manquants, objets de style JS et autres problèmes. Le résultat modifié sera mis en évidence après réparation.

Les noms de champ générés ne sont pas conformes aux conventions de nommage Go

L'outil génère des noms de champ PascalCase à partir des clés JSON. Si les clés contiennent du chinois ou des caractères spéciaux, des noms de champ échappés peuvent être générés. Nous recommandons de changer les clés JSON en anglais minuscules ou snake_case, puis d'ajuster uniformément après génération.

Le champ null génère interface{}, je veux changer en type spécifique

Comme null ne peut pas inférer de type spécifique, l'outil utilise interface{} comme secours. Vous pouvez donner à ce champ une valeur d'exemple (comme "" ou 0) dans le JSON source, régénérer puis changer le type au type réel comme string/int64.

La page ralentit après conversion de JSON volumineux

Le rendu dans le navigateur de JSON surdimensionné et de grandes quantités de structs consomme une mémoire importante. Recommandations : ① Ne conserver que les champs clés dans le JSON d'exemple ; ② Diviser en plusieurs objets et convertir séparément ; ③ Fermer les autres onglets du navigateur qui consomment beaucoup de mémoire.

Type d'élément de tableau inféré comme []interface{}

Lorsque le tableau est vide [] ou que les types d'éléments sont incohérents, l'outil utilise interface{} comme secours. Vous pouvez ajouter des éléments d'exemple du même type, ou changer manuellement le type en types de slice spécifiques comme []string, []int64 après génération.

Glossaire

struct
Type de données composite de Go utilisé pour combiner plusieurs champs en un type. Le corps du code Go généré par cet outil se compose de plusieurs définitions de struct.
slice
Type de tableau dynamique de Go, syntaxe []T. Cet outil mappe les tableaux JSON à des slices correspondants, par exemple []string, []int64, []UserItem.
json tag
Chaîne entre backticks après le champ struct Go, par exemple `json:"user_name"`, utilisée pour spécifier le nom du champ pendant la sérialisation/désérialisation d'encoding/json. Cet outil génère automatiquement cette balise.
interface{}
Type d'interface vide de Go, peut représenter n'importe quelle valeur. Cet outil utilise interface{} comme secours sûr lors de la rencontre de JSON null ou de type indéterminé.
PascalCase
Style de nommage où chaque mot commence par une majuscule, par exemple UserName, AddressCity. Go exige que les champs exportés commencent par une majuscule, donc cet outil convertit automatiquement les noms de champ JSON en PascalCase.
encoding/json
Paquet d'encodage/décodage JSON dans la bibliothèque standard de Go. Après que les structs générés par cet outil sont associés à des balises json, json.Unmarshal et json.Marshal peuvent être utilisés directement.
unmarshal
Processus d'analyse d'un flux d'octets JSON en une valeur Go. Après avoir généré le struct, l'utilisation la plus courante est d'appeler json.Unmarshal(data, &user).
omitempty
Option courante pour la balise json de Go, par exemple `json:"name,omitempty"`, signifie omettre la sortie lorsque le champ est une valeur zéro. Cet outil ne génère pas omitempty par défaut ; ajouter manuellement selon les besoins après génération.

Tableau de correspondance des types JSON vers types Go

Cet outil infère automatiquement les types Go correspondants basés sur le type de valeur JSON ; les mappages courants sont les suivants :

Exemple de valeur JSONType Go généréNote
"hello"stringMappage direct de chaîne
true / falseboolValeur booléenne
42int64Nombre sans point décimal
3.14float64Nombre avec point décimal
nullinterface{}Secours sûr quand le type spécifique ne peut pas être inféré
["a","b"][]stringTableau de chaînes
[1,2,3][]int64Tableau d'entiers
[{...},{...}][]UserItemTableau d'objets, types d'éléments générés récursivement
{"id":1}UserL'objet génère un struct indépendant

Recommandations de sélection de types numériques courants en Go

L'outil utilise int64 et float64 par défaut ; ajuster selon les besoins dans les projets réels :

ScénarioType recommandéRaison
IDs entiers généraux, comptagesint64Conforme à la valeur par défaut de l'outil, compatible avec la plupart des nombres JSON
PK auto-incrémentée de base de données connue comme positiveuint64Évite les nombres négatifs, sémantique plus claire
Systèmes 32 bits ou entiers de petite plage explicitesint32Réduit l'empreinte mémoire
Prix, coordonnées, calcul scientifiquefloat64Conforme à la valeur par défaut de l'outil, précision à virgule flottante standard
Calcul monétaire précisdecimal.Decimal / intfloat64 a un risque de précision ; recommande shopspring/decimal ou int en unité de cents

Privacy & Security

Tout le traitement de cet outil JSON vers Go s'achève entièrement localement dans votre navigateur : l'analyse JSON, l'inférence de type, la génération de code Go s'exécutent tous côté client via Web Worker ; le contenu JSON saisi, les fichiers téléchargés et le code Go généré ne sont jamais téléchargés vers aucun serveur, ni enregistrés, mis en cache ou stockés dans le cloud. Après avoir fermé ou actualisé la page, tout le contenu d'entrée et de sortie est automatiquement effacé de la mémoire, seul localStorage conserve votre historique d'entrée récent (peut être effacé à tout moment). Convient au traitement de JSON contenant des clés API, tokens, données métier sensibles.