Aller au contenu
Tout en local

JSON vers schéma Zod

Générez un schéma de validation Zod et des types TypeScript à partir d'un exemple JSON, avec détection de formats et d'énumérations.

Entrée
Sortie

JSON vers schéma Zod

Collez un exemple JSON — une réponse API, un fichier de configuration, une ligne de base de données — et obtenez un schéma Zod prêt à l'emploi en TypeScript. Les types sont déduits par champ : les primitives sont mappées à z.string(), z.number() et z.boolean(), les tableaux ont leur type d'élément déduit, et une valeur qui diffère entre les occurrences devient un z.union(). Une chaîne qui ressemble à une adresse e-mail, une URL, un UUID ou une date ISO obtient le validateur correspondant — .email(), .url(), .uuid(), .date() ou .datetime() — au lieu d'un simple z.string().

Donnez-lui un tableau d'objets de même forme, comme les lignes d'un endpoint de liste, et le générateur fusionne chaque élément avant de typer le champ : une clé manquante dans certaines lignes devient .optional(), une clé parfois nulle devient .nullable() ou .optional() selon le paramètre que vous choisissez, et un champ qui répète un petit ensemble de valeurs — une colonne d'état ou de rôle — devient un z.enum() approprié au lieu d'une chaîne ouverte. Activez « Diviser les objets imbriqués » pour extraire chaque objet imbriqué dans sa propre exportation nommée au lieu d'un littéral profondément imbriqué, où les formes identiques partagent automatiquement un schéma. Activez « Objets stricts » pour rejeter toute clé que l'exemple n'a jamais affichée, en détectant les fautes de frappe et les champs API inattendus lors de l'analyse au lieu de plus tard.

Nommez le schéma exporté comme votre code s'y attend et, éventuellement, ajoutez export type X = z.infer<typeof X> juste en dessous, pour que le validateur d'exécution et le type de compilation proviennent de la même source et ne puissent jamais diverger silencieusement.

Tout s'exécute localement dans votre navigateur. Le JSON que vous collez — les réponses API contenant des jetons, les enregistrements utilisateur, les charges utiles internes — est analysé et typé entièrement sur votre appareil et n'est jamais téléchargé nulle part. Collez un exemple, copiez le schéma généré dans votre projet et commencez à valider ce que vous analysez.

FAQ

Comment choisit-il entre .optional() et .nullable()?
Une clé manquante dans certains exemples de tableau est toujours .optional() — il n'y a pas d'autre moyen de permettre une clé manquante. Une clé qui est présente mais parfois nulle est ambigüe, donc l'option « Gestion null » décide : nullable la tape précisément avec .nullable(), optional traite une valeur nulle comme une valeur manquante.
Comment les objets imbriqués sont-ils gérés?
Par défaut, un objet imbriqué est typé en ligne, exactement où il apparaît. Activez « Diviser les objets imbriqués » pour donner à chaque forme imbriquée son propre export const ...Schema et les formes identiques partagent automatiquement un schéma au lieu de le dupliquer.
Quand un champ devient-il z.enum() au lieu de z.string()?
Lorsque « Détecter les énumérations » est activé et qu'un champ répète un petit ensemble de valeurs de chaîne distinctes — 2 à 5 — sur un tableau d'exemples, comme une colonne d'état ou de catégorie. Un champ avec seulement des valeurs uniques ou trop de valeurs distinctes reste z.string().
Que fait l'option « Objets stricts »?
Elle ajoute .strict() à chaque z.object() généré, de sorte que l'analyse échoue si l'entrée contient une clé que l'exemple n'a jamais affichée — utile pour détecter les fautes de frappe ou les ajouts API non annoncés au lieu de les ignorer silencieusement.
Mon JSON est-il téléchargé quelque part?
Non. Le schéma est généré entièrement dans votre navigateur — votre JSON ne quitte jamais votre appareil.