JSON en TypeScript — et aussi Zod, Go, Python, Java, C#, Rust
Collez un exemple JSON et obtenez des interfaces TypeScript, un schéma Zod, un JSON Schema ou des types pour Go, Python, Java, C#, Kotlin, Swift et Rust.
Les types sont déduits de l’exemple uniquement. Un champ null dans votre exemple devient null ou any ; collez un exemple plus riche (ou un tableau de plusieurs enregistrements) pour des types plus précis.
Fonctionne entièrement dans votre navigateur. Votre JSON n’est jamais envoyé en ligne : vous pouvez l’utiliser sans risque avec de vraies réponses d’API. Parcourir tous les outils gratuits.
Un problème, ou quelque chose à améliorer ? Nous lisons chaque message et corrigeons vite.
Ce convertisseur JSON en TypeScript gratuit lit un exemple JSON, comme une réponse d’API ou un fichier de configuration, et écrit les interfaces TypeScript correspondantes, avec un type nommé pour chaque objet imbriqué. La même entrée produit aussi un schéma Zod, un JSON Schema, des structs Go, des dataclasses Python ou des modèles Pydantic, et des classes pour Java, C#, Kotlin, Swift et Rust : fini la saisie des noms de champs à la main.
L’inférence de types utilise quicktype, le moteur open source derrière quicktype.io et l’extension d’éditeur « Paste JSON as Code », exécuté dans votre navigateur. Il fusionne tous les objets d’un tableau : un champ présent dans seulement certains enregistrements devient facultatif. Il ne peut inférer qu’à partir de ce qu’il voit : un champ null dans votre exemple est typé null, et un tableau vide comme un tableau de n’importe quoi. Collez un exemple avec de vraies valeurs, ou plusieurs enregistrements, pour obtenir les types les plus précis.
Mode d’emploi
- Collez un objet JSON ou un tableau d’objets. Un exemple d’enregistrement utilisateur est chargé pour commencer.
- Choisissez la sortie : interfaces TypeScript, alias de type, Zod, JSON Schema, Go, Python, Java, C#, Kotlin, Swift ou Rust.
- Définissez le nom du type racine (par exemple User ou OrderResponse). Les types imbriqués sont nommés d’après leurs clés.
- Cochez « Rendre toutes les propriétés facultatives » pour des charges partielles comme les corps de PATCH. Décochez « Types uniquement » pour obtenir des fonctions de sérialisation quand le langage le permet.
- Copiez le code ou téléchargez-le dans un fichier avec la bonne extension.
Questions fréquentes
Comment convertir du JSON en interface TypeScript ?
Collez le JSON dans la zone avec TypeScript (interfaces) sélectionné. Chaque objet devient une interface exportée : les chaînes deviennent string, les nombres number, les booléens boolean, les tableaux T[], et les objets imbriqués reçoivent leur propre interface nommée d’après la clé, par exemple address → Address. Copiez le résultat dans un fichier .ts et importez-le là où vous analysez la réponse.
Faut-il utiliser une interface ou un alias de type ?
Pour décrire des objets, ils sont presque interchangeables. Les interfaces peuvent être étendues et fusionnées en les redéclarant, et de nombreux guides de style les préfèrent pour les types d’objets publics. Les alias de type peuvent aussi exprimer des unions et des types mappés. L’option TypeScript (type aliases) produit `export type User = { ... }` si votre code préfère ce style.
Comment les champs facultatifs sont-ils détectés ?
À partir de l’exemple. Si votre JSON est un tableau d’objets et qu’une clé manque dans certains, cette propriété est marquée facultative (name?: string). Une clé présente mais null dans tous les enregistrements devient null, et une clé qui est une chaîne dans certains enregistrements et null dans d’autres devient null | string. Pour rendre toutes les propriétés facultatives, utilisez l’option prévue.
Pourquoi utiliser un schéma Zod plutôt qu’une interface TypeScript ?
Une interface n’existe qu’à la compilation ; elle ne peut pas vérifier qu’une API a vraiment renvoyé ce que vous attendez. Un schéma Zod valide les données à l’exécution (UserSchema.parse(data) lève une erreur si un champ manque ou n’a pas le bon type) et vous donne le type TypeScript via z.infer : une seule définition couvre les deux. Le code Zod généré exporte à la fois le schéma et le type inféré.
Détecte-t-il les dates et les UUID ?
Seulement si vous activez « Détecter les dates, UUID et nombres dans les chaînes ». C’est désactivé par défaut, car le JSON n’a pas de type date : JSON.parse renvoie "2026-03-14T09:26:53Z" sous forme de chaîne, donc le typer en Date serait faux, à moins d’utiliser aussi le convertisseur généré. Avec la détection activée, Go obtient time.Time, C# DateTimeOffset et Guid, et Python datetime et UUID.
Mon JSON est-il envoyé ?
Non. La bibliothèque quicktype est téléchargée une fois (environ 1 Mo) et s’exécute dans l’onglet de votre navigateur. Votre JSON n’est jamais envoyé nulle part : vous pouvez coller sans risque de vraies réponses d’API contenant des données personnelles.
Correspondance des valeurs JSON dans chaque langage
• Chaînes : string en TypeScript, Go, Swift et Kotlin (String), str en Python, String en Java et Rust, string en C#.
• Nombres entiers : number en TypeScript, int64 en Go, int en Python, long en Java, Long en Kotlin, long en C#, Int en Swift, i64 en Rust. Les nombres décimaux deviennent float64, float ou double.
• Booléens : boolean, bool, Boolean, Bool, selon l’orthographe de chaque langage.
• Tableaux : T[] en TypeScript, []T en Go, List[T] ou list[T] en Python, List<T> en Java, Kotlin et C#, [T] en Swift, Vec<T> en Rust.
• Objets imbriqués : un type ou une classe nommé distinct. Les objets avec de nombreuses clés dynamiques (comme une table d’identifiants) sont détectés et typés comme une map ou un Record plutôt qu’en centaines de champs.
• null : null en TypeScript, interface{} en Go, None en Python, object en C#. Donnez au champ une vraie valeur dans votre exemple pour obtenir un type utile.
Obtenir des types précis à partir d’un exemple
L’inférence ne vaut que ce que vaut l’exemple. Trois habitudes font une grande différence. D’abord, collez plusieurs enregistrements sous forme de tableau plutôt qu’un seul objet, pour faire apparaître les champs facultatifs et les types mixtes. Ensuite, remplacez les null par des valeurs réalistes quand vous connaissez le type, car un champ null dans tous les enregistrements ne donne aucune information. Enfin, renommez le type racine selon ce qu’est réellement la charge (InvoiceResponse, pas Root) ; les types imbriqués sont nommés d’après leurs clés et se lisent bien mieux dans un code quand la racine a un nom parlant.
Si l’API vous appartient, la meilleure solution à long terme est de générer les types à partir de son schéma (OpenAPI ou JSON Schema) plutôt qu’à partir d’exemples. La sortie JSON Schema de cet outil est un point de départ raisonnable pour écrire ce schéma.
Outils gratuits similaires
- Formateur JSON — Indentez, minifiez et validez du JSON, avec les erreurs d’analyse localisées par ligne et colonne. Dans votre navigateur, sans envoi.
- curl en code — Collez une commande curl, y compris un « Copy as cURL » de Chrome, et obtenez la même requête en Python, JavaScript, Node, Go, PHP, Ruby, Java, C#, wget ou HTTPie.
- Validateur YAML — Validez du YAML avec la ligne et la colonne exactes de chaque erreur, et repérez les fautes que les parseurs acceptent sans rien dire : booléens yes/no, tabulations, clés en double.
- Décodeur JWT — Décodez l’en-tête et la charge utile d’un JWT, lisez l’expiration en clair, vérifiez les signatures HS, RS, PS et ES ou signez un nouveau jeton. Rien ne quitte votre navigateur.
- Formateur SQL — Transformez du SQL désordonné en requêtes lisibles et indentées de façon cohérente pour PostgreSQL, MySQL, T-SQL, BigQuery et plus. Dans votre navigateur.