Ce que fait cet outil
Un échantillon JSON devient des schémas Zod, un const par objet.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import { z } from "zod";
export const AddressSchema = z.object({
city: z.string(),
});
export const RootSchema = z.object({
id: z.int(),
name: z.string(),
address: AddressSchema,
});
Les enfants viennent d’abord : ce sont des constantes d’exécution, et un schéma doit exister avant qu’un autre le mentionne.
Les nombres sont lus tels qu’ils sont écrits
z.int() pour un entier, z.number() pour tout ce qui porte un point décimal ou un exposant :
{ "price": 10.0, "quantity": 3 }
price: z.number(),
quantity: z.int(),
Jusqu’à peu, price sortait en z.int() : 10.0 s’analyse en un nombre entier et rien ne conservait le littéral. Le schéma refusait alors 10.5 — l’enregistrement suivant, très probablement. JSON n’a qu’un type numérique : la forme écrite est le seul témoignage de ce que voulait le producteur, et la conversion la lit désormais. Le défaut a été trouvé en écrivant cette page, puis corrigé.
Syntaxe Zod 4
z.int() est l’écriture de Zod 4. En Zod 3, écrivez z.number().int() ; rien d’autre ne diffère entre les deux versions dans cette sortie.
Ce qu’un échantillon ne peut pas décider pour vous
- Rien n’est
.optional(). Une clé vue une fois peut apparaître ; savoir si elle apparaît toujours n’est pas dans le document. nulldonnez.null(), un schéma qui n’accepte rien d’autre. Si le champ est « une chaîne, parfois absente », le.nullable()vous revient.- Les clés inconnues sont retirées, pas refusées, parce que c’est le défaut de Zod.
.strict()est une décision sur votre API. - Un tableau hétérogène devient une union :
[1, "a"]donnez.array(z.union([z.int(), z.string()])), ce qui décrit exactement l’échantillon et sera peut-être plus large que vos données réelles.
Chacun de ces points est un endroit où le schéma engendré n’est qu’un point de départ, et la page le dit plutôt que de vous le laisser découvrir en revue.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.