Convertir JSON en schéma Zod
Génère un schéma Zod à partir d’un échantillon JSON avec la bibliothèque json-to-zod. Chaque valeur correspond à z.string(), z.number(), z.boolean(), z.null() ou à un z.object() imbriqué ; les tableaux vides deviennent z.array(z.unknown()).
Ébaucher un validateur d’exécution pour une réponse d’API dont vous n’avez qu’un exemple.
Quand l’utiliser
- Ébaucher un validateur d’exécution pour une réponse d’API dont vous n’avez qu’un exemple.
- Ajouter une validation Zod à un formulaire ou à un chargeur de configuration sans écrire le schéma à la main.
Mode d’emploi
- Collez un échantillon JSON représentatif dans l’éditeur de gauche.
- Ouvrez les paramètres et définissez Root Schema Name si vous voulez un autre nom que schema.
- Copiez le code, puis affinez-le : ajoutez .optional(), .email(), .min() et des règles similaires d’après votre spécification réelle.
Échantillon JSON
{
"id": 42,
"email": "ada@example.com",
"roles": ["admin", "editor"],
"profile": { "nickname": null, "verified": true },
"tags": []
}Schéma Zod (TypeScript)
import { z } from "zod"
export const schema = z.object({
id: z.number(),
email: z.string(),
roles: z.array(z.string()),
profile: z.object({ nickname: z.null(), verified: z.boolean() }),
tags: z.array(z.unknown()),
})Détails et limites
La génération s’exécute dans le navigateur ; la bibliothèque est chargée à la demande.
Les types proviennent d’un seul échantillon. null devient seulement z.null(), pas .nullable(), et les clés absentes ne sont jamais marquées optionnelles.
Les tableaux dont les éléments ont des formes différentes deviennent un z.union([...]) de chaque forme, qui peut nécessiter une fusion manuelle.
Les formats comme e-mail, date ou UUID ne sont pas détectés ; ils deviennent tous z.string().
FAQ
Puis-je convertir un tableau JSON à la racine ?
Oui. Un tableau racine devient z.array(...). Si ses objets ont des clés différentes, chaque objet distinct devient un membre d’un z.union.
Comment les valeurs null sont-elles typées ?
En z.null(), qui n’accepte que null. Si le champ peut aussi contenir une chaîne, remplacez-le par z.string().nullable().
Ajoute-t-il .optional() aux champs absents ?
Non. Chaque clé de l’échantillon est obligatoire. Marquez vous-même les champs optionnels.