Générateur de structs JSON vers TypeScript / Go / Rust
Collez du JSON, choisissez la langue cible, obtenez une définition de type idiomatique. TypeScript, Go, Rust, Kotlin, Java, C#, Python TypedDict. Basé sur quicktype, dans le navigateur.
- Collez un échantillon JSON représentatif dans la zone de texte de gauche.
- Choisissez la langue cible dans le menu déroulant Cible.
- Cliquez sur Générer. Le premier clic charge le moteur (~2–3 secondes sur une connexion 4G) ; les suivants sont instantanés.
- Copiez le résultat ou téléchargez-le avec la bonne extension de fichier.
Que fait-il ?
Génère des types idiomatiques dans votre langue cible en inférant le schéma à partir d'un ou plusieurs échantillons JSON. Les types de champs sont inférés — les chaînes restent chaînes, les nombres deviennent le type numérique de la langue, les booléens deviennent bool, les tableaux deviennent slices/listes/tableaux, les objets imbriqués deviennent des types imbriqués. Les champs optionnels (parfois null ou absents entre échantillons) sont marqués comme nullables dans la sortie. Basé sur quicktype-core, le même moteur derrière quicktype.io.
Exemple
Entrée JSON :
{
"name": "Ada",
"age": 36,
"active": true,
"tags": ["math", "logic"]
} Sortie TypeScript (cible = TypeScript, nom du type = User) :
export interface User {
name: string;
age: number;
active: boolean;
tags: string[];
} Pièges courants et comment les gérer
L'inférence de types depuis JSON a des limites fondamentales — JSON ne porte pas assez d'informations pour contraindre totalement un système de types. Les motifs ci-dessous couvrent où le type inféré peut ne pas correspondre à ce que vous voulez.
- Optionnel vs. requis depuis un seul échantillon. Un seul objet JSON ne peut pas dire au générateur quels champs sont optionnels. Fournissez plusieurs échantillons (collez un tableau JSON d'objets représentatifs) pour que le générateur puisse marquer les champs parfois manquants comme optionnels.
- Tableaux vides. `{"items": []}` produit un tableau de `any` — le générateur n'a aucun élément à inférer. Incluez au moins un exemple peuplé, ou corrigez le type à la main après génération.
- Éléments de tableau hétérogènes. Un tableau JSON `[1, "two"]` devient un type union — le résultat peut ne pas être ergonomique dans certaines langues cibles (Go en particulier). Si le tableau est censé être homogène dans vos vraies données, corrigez l'échantillon.
- Chaînes de date. JSON n'a pas de type Date. Les chaînes de date ISO 8601 sont inférées comme `string`. quicktype peut parfois les détecter comme Date dans la sortie TypeScript — ajustez à la main si vous voulez un typage plus fort.
- IDs numériques qui perdent en précision. Les nombres JSON > 2^53 (gros IDs 64 bits) perdent en précision quand parsés par JavaScript. Le type TypeScript généré utilise `number` quand même. Pour la précision 64 bits, utilisez `string` dans votre JSON ou migrez à un type `bigint` à la main.
- Champs avec underscore vs. camelCase. Le générateur préserve le nommage des champs JSON. Si votre JSON utilise snake_case mais la langue cible attend camelCase, la sortie utilise des champs snake_case avec annotations serde/json là où applicable. Surchargez par post-traitement ou en utilisant les flags CLI de quicktype.
Questions fréquentes
Pourquoi le premier Générer est-il lent ?
Le bundle du moteur quicktype fait environ 465 Ko gzippé. Il charge au premier clic Générer, qui prend 2–3 secondes sur une connexion 4G. Après cela le module est mis en cache pour le reste de la session de la page — et le navigateur le met en cache entre les visites, donc les premiers clics suivants sont aussi instantanés à moins que le cache n'ait été vidé.
Puis-je générer à partir de plusieurs échantillons JSON ?
Encadrez vos échantillons dans un tableau JSON et collez le tableau. Le générateur infère l'union des champs vus entre les échantillons et marque les champs comme optionnels quand ils manquent à au moins un. C'est la bonne façon de s'assurer que vos types générés tolèrent la variation des vraies données.
Quelle langue choisir pour le code backend ?
Suivez ce que votre projet utilise déjà. La sortie Go utilise les tags de struct standard pour `encoding/json`. Rust utilise les serde derives. Kotlin utilise les annotations kotlinx.serialization. Java produit des POJOs compatibles Jackson. Le choix est spécifique au projet, non basé sur la préférence.
Les commentaires de champs sont-ils préservés ?
JSON n'a pas de syntaxe de commentaires, donc il n'y a pas de commentaires dans l'entrée à transférer. quicktype peut inclure des doc comments dans la sortie pour certaines langues — ce sont des descriptions auto-générées, pas du contenu utilisateur.
Mon JSON est-il téléchargé ?
Non. Tout s'exécute dans votre navigateur — votre entrée est traitée localement par le module JavaScript quicktype-core sur cette page. quicktype-core lui-même charge depuis la même origine (l'hôte d'assets statiques de ce site) ; aucun serveur tiers ne voit vos données.
Quelle taille d'échantillon JSON puis-je utiliser ?
Jusqu'à environ 5 Mo de JSON avant que le générateur ne commence à prendre du temps notable. Le générateur est conçu pour des échantillons représentatifs, pas des datasets complets — typiquement une poignée d'objets suffit pour inférer un schéma propre.