Générez interfaces TypeScript, schémas Zod et modèles Pydantic depuis un exemple JSON dans cette page. La sortie est vérifiée avec tsc --strict, Zod 3 et 4 et Pydantic 2 avant publication.
Fonctionne localement dans votre navigateurCollez une réponse, un appareil ou un objet de configuration API. L'échantillon reste dans ce navigateur.
Generate from a JSON sample to create TypeScript types.
L'inférence est basée sur l'échantillon fourni. Examinez les ID, les valeurs nullables, les chaînes de date et les contraintes métier avant d'utiliser les types générés en production.
Collez un exemple JSON, nommez le type racine puis cliquez sur Générer des types : la même structure apparaît en TypeScript, Zod et Pydantic, chacune dans son onglet. L’exemple est lu par le navigateur dans cette page ; rien n’est téléversé et aucune requête ne le transporte.
Les noms déduits sont vérifiés avec de vrais compilateurs avant publication : la sortie TypeScript passe tsc --strict, le schéma Zod valide son propre exemple sous Zod 3 et Zod 4, et les modèles Pydantic s’importent et valident l’exemple sous Pydantic 2.
Un objet JSON devient une interface (ou un alias de type quand l’exemple est un tableau ou une valeur seule), les tableaux deviennent Array<…> et un objet vide devient Record<string, unknown>. Zod reçoit la même structure sous forme de schéma plus un type z.infer, et Pydantic une classe BaseModel par objet avec List, Optional, Union et Dict de typing.
La case Export declarations décide si les lignes TypeScript et Zod portent export ; la sortie Pydantic reste du Python ordinaire dans les deux cas.
Toutes les entrées d’un tableau sont fusionnées : une clé présente dans une partie seulement des objets devient facultative (role?: string en TypeScript, .optional() en Zod, Optional[…] = None en Pydantic) et une clé dont les valeurs changent de type devient une union. Des objets mêlés à des scalaires ou à null produisent aussi une union, et null ne masque jamais l’autre type : il reste à côté.
Un tableau vide donne unknown / z.unknown() / List[Any], car un exemple sans élément ne porte aucune information de type.
Les clés que Python ne peut pas écrire gardent leur graphie JSON en alias : {"a-b": 1} devient a_b avec alias="a-b", et class, import ou None deviennent class_, import_ ou None_ pour que le fichier s’importe. Les clés model_config, model_dump et tout ce qui commence par model_ reçoivent aussi un suffixe, car Pydantic réserve cet espace de noms.
Deux clés qui fusionneraient sinon en un seul champ restent séparées : {"a-b": 1, "a_b": 2} donne a_b et a_b_2 avec leurs propres alias, et les objets imbriqués aux noms en conflit obtiennent des classes distinctes.
Tout tourne dans l’onglet : la conversion n’envoie aucune requête et l’exemple disparaît au rechargement. Un exemple de 2 Mo est typé en environ 0,35 s dans Chrome.
Les types viennent d’un seul exemple et décrivent donc ce document : les clés facultatives sont celles absentes d’une partie du tableau, pas celles que votre API peut omettre, et les textes restent string — aucun format e-mail, date ou UUID n’est deviné. L’exemple est lu par l’analyseur JSON du navigateur : au-delà de 2^53, les entiers perdent en précision et finissent en float dans la sortie Pydantic.