Saltar al contenido

Convertir JSON a un esquema Zod

Genera un esquema Zod a partir de una muestra JSON con la biblioteca json-to-zod. Cada valor se asigna a z.string(), z.number(), z.boolean(), z.null() o un z.object() anidado; los arrays vacíos pasan a z.array(z.unknown()).

Esbozar un validador en tiempo de ejecución para una respuesta de API de la que solo tienes un ejemplo.

JSON

Zod Schema

Cuándo usarla

  • Esbozar un validador en tiempo de ejecución para una respuesta de API de la que solo tienes un ejemplo.
  • Añadir validación con Zod a un formulario o a un cargador de configuración sin escribir el esquema a mano.

Cómo usarla

  1. Pega una muestra JSON representativa en el editor izquierdo.
  2. Abre la configuración y define Root Schema Name si quieres un nombre distinto de schema.
  3. Copia el código y ajústalo: añade .optional(), .email(), .min() y reglas similares según tu especificación real.

Muestra JSON

{
  "id": 42,
  "email": "ada@example.com",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Esquema 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()),
})

Detalles y limitaciones

La generación se ejecuta en el navegador; la biblioteca se carga bajo demanda.

Los tipos salen de una sola muestra. null pasa solo a z.null(), no a .nullable(), y las claves ausentes nunca se marcan como opcionales.

Los arrays con elementos de formas distintas pasan a z.union([...]) con cada forma, que puede requerir una fusión manual.

No se detectan formatos como email, fecha o UUID; todos son z.string().

FAQ

¿Puedo convertir un array JSON en la raíz?

Sí. Un array raíz pasa a z.array(...). Si sus objetos tienen claves distintas, cada objeto distinto pasa a ser un miembro de un z.union.

¿Cómo se tipan los valores null?

Como z.null(), que solo acepta null. Si el campo también puede contener una cadena, cámbialo a z.string().nullable().

¿Añade .optional() a los campos ausentes?

No. Todas las claves de la muestra son obligatorias. Marca tú mismo los campos opcionales.

Especificaciones y referencias