Qué hace esta herramienta
Una muestra JSON pasa a ser esquemas de Zod, un const por objeto.
{ "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,
});
Los hijos van primero: son constantes de ejecución, y un esquema debe existir antes de que otro lo mencione.
Los números se leen como se escribieron
z.int() para un entero, z.number() para todo lo que lleve punto decimal o exponente:
{ "price": 10.0, "quantity": 3 }
price: z.number(),
quantity: z.int(),
Hasta hace poco price salía como z.int(): 10.0 se analiza como un número entero y nada guardaba el literal. El esquema rechazaba entonces 10.5, el registro siguiente con toda probabilidad. JSON tiene un solo tipo numérico: la forma escrita es el único testimonio de lo que quiso el productor, y ahora la conversión la lee. El defecto se encontró al escribir esta página y se corrigió.
Sintaxis de Zod 4
z.int() es la escritura de Zod 4. En Zod 3, escribe z.number().int(); nada más difiere entre las dos versiones en esta salida.
Lo que una muestra no puede decidir por ti
- Nada es
.optional(). Una clave vista una vez puede aparecer; si aparece siempre no está en el documento. nulldaz.null(), un esquema que no acepta nada más. Si el campo es «una cadena, a veces ausente», el.nullable()te toca a ti.- Las claves desconocidas se quitan, no se rechazan, porque es el comportamiento por defecto de Zod.
.strict()es una decisión sobre tu API. - Un array heterogéneo pasa a unión:
[1, "a"]daz.array(z.union([z.int(), z.string()])), que describe la muestra con exactitud y quizá sea más ancho que tus datos reales.
Cada uno de estos puntos es un sitio donde el esquema generado es solo un punto de partida, y la página lo dice en vez de dejar que lo descubras en revisión.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.