JSON vers types
Un échantillon d’un côté, un type de l’autre.
Les exemples remplacent temporairement la saisie et les réglages. Vous pouvez rétablir votre travail précédent.
Collez ou saisissez du texte ci-dessus pour voir le résultat ici.
Vos fichiers restent sur votre appareil
Cet outil fonctionne entièrement dans votre navigateur. Ce que vous collez est traité sur votre appareil et n’est jamais envoyé à un serveur : vous pouvez l’utiliser sans crainte avec des jetons, des clés et des textes non publiés.
Exemple
Exemple : deux communes en JSON converties en interface TypeScript, codes postaux en texte
Pour un formulaire d’adresse, une développeuse colle la liste des communes d’un département, un tableau JSON. Deux communes fictives de l’Ain : Val-des-Pins (code 01999, codes postaux 01100 et 01110, 4 812 habitants, avec un point centre) et Les Granges (code 01998, code postal 01120, population null, sans centre). Réglages : TypeScript, nom Commune, retrait de 4 espaces.
- Le JSON commence par un tableau : le type décrit une commune et s’appelle Commune. Une dernière ligne ajoute CommuneList = Commune[] pour la liste entière.
- code et codesPostaux restent des string, car ils sont entre guillemets dans le JSON. C’est ce qu’il faut pour un code de l’Ain qui commence par 0 : en nombre, 01100 deviendrait 1100.
- population vaut 4812 puis null, d’où number | null. centre n’existe que pour Val-des-Pins, d’où centre?: Centre, un type à part avec type et coordinates.
| Champ | Dans l’échantillon | Type |
|---|---|---|
| nom | "Val-des-Pins", "Les Granges" | string |
| code | "01999", "01998" | string |
| codesPostaux | 2 codes, puis 1 | string[] |
| population | 4812, null | number | null |
| centre | présent une fois sur deux | Centre, facultatif (centre?) |
| coordinates | [5.61, 46.25] | number[] |
2 interfaces, Commune et Centre, plus CommuneList, indentées de 4 espaces. À resserrer à la main : coordinates est toujours une paire longitude, latitude, que l’on peut écrire [number, number]. Un seul échantillon ne permet pas de le deviner.
Comment ça marche
- Collez une réponse réelle. Un enregistrement véritable vaut mieux qu’un exemple inventé.
- Choisissez TypeScript, Go ou Zod.
- Nommez le type racine, ou laissez Root.
- Copiez le résultat et relisez-le : inférer depuis un échantillon donne un premier jet, pas une spécification.
Questions fréquentes
- Regarde-t-il tous les éléments d’un tableau ou seulement le premier ?
- Tous. [{a:1},{a:1,b:2}] rend b optionnel au lieu de faire comme s’il n’existait pas — précisément l’erreur qui rend les types générés pénibles deux semaines plus tard.
- Que fait-il de null ?
- Il élargit plutôt qu’il ne restreint. Un champ qui a été null une fois est un champ qui peut être null : en TypeScript cela devient une union, en Go un pointeur. C’est presque toujours ce que fait réellement l’API.
- Puis-je faire confiance au résultat ?
- Comme point de départ. Un échantillon ne peut pas dire qu’un champ est une énumération, qu’un nombre est entier ou qu’une chaîne est une date : relisez et resserrez. Cela économise la frappe, pas la réflexion.
- Et si mon JSON commence par un tableau ?
- Le type décrit alors un seul élément, avec le nom que vous tapez, et tous les éléments sont lus : un champ absent de certains devient facultatif. En TypeScript, une dernière ligne ajoute un type de liste, par exemple CommuneList = Commune[] ; avec Zod, validez la liste entière avec z.array() autour du schéma.
- Pourquoi les nombres sortent-ils en number, ou float64 en Go, jamais en entier ?
- Parce qu’un échantillon ne prouve pas qu’un nombre est toujours entier : 24 aujourd’hui peut valoir 24.5 demain. TypeScript et Zod écrivent number, Go écrit float64. Si un identifiant ou une quantité est toujours entier, passez-le en int ou int64 en Go, ou ajoutez .int() en Zod.
- Quelque chose part-il vers un serveur ?
- Non. Tout tourne dans le navigateur : ce que vous collez reste sur votre ordinateur.