JSON vers Go
Aucun contenu
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
- 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.
- Attendez environ 400ms, l'outil convertira automatiquement et affichera le code struct Go généré à droite.
- 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.
- 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é
goAprè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
goSi 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 JSON | Type Go généré | Note |
|---|---|---|
"hello" | string | Mappage direct de chaîne |
true / false | bool | Valeur booléenne |
42 | int64 | Nombre sans point décimal |
3.14 | float64 | Nombre avec point décimal |
null | interface{} | Secours sûr quand le type spécifique ne peut pas être inféré |
["a","b"] | []string | Tableau de chaînes |
[1,2,3] | []int64 | Tableau d'entiers |
[{...},{...}] | []UserItem | Tableau d'objets, types d'éléments générés récursivement |
{"id":1} | User | L'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énario | Type recommandé | Raison |
|---|---|---|
| IDs entiers généraux, comptages | int64 | Conforme à 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 positive | uint64 | Évite les nombres négatifs, sémantique plus claire |
| Systèmes 32 bits ou entiers de petite plage explicites | int32 | Réduit l'empreinte mémoire |
| Prix, coordonnées, calcul scientifique | float64 | Conforme à la valeur par défaut de l'outil, précision à virgule flottante standard |
| Calcul monétaire précis | decimal.Decimal / int | float64 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.
- Compression JSON
- CSV vers JSON
- JSON vers CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- Formatage JSON
- Générateur JSON
- Requête JSONPath
- Fusionner JSON
- Réparer JSON
- Validateur JSON Schema
- Trier JSON
- JSON Stringify
- JSON vers HTML
- JSON vers Java
- JSON to Markdown
- JSON en SQL
- JSON vers TOML
- JSON vers TypeScript
- XML vers JSON
- JSON vers XML
- YAML vers JSON
- JSON vers YAML
- JSON vers Python
- JSON vers Go
- JSON vers Rust
- JSON vers Swift
- JSON vers C#
- JSON vers C++
- JSON vers PHP