JSON to Zod
Generate Zod schemas from JSON
Opciones del esquema
Se exporta como const. El tipo inferido se exporta como Root.
JSON de entrada
Límites: 5 MiB por archivo o 5.242.880 caracteres, 256 niveles de anidación.
Esquema Zod
Se revisan todos los elementos de cada array: los tipos distintos se convierten en z.union(...) y las claves ausentes en algunos objetos pasan a .optional(). Usa el resultado como punto de partida y ajústalo con formatos, enums o límites.
Qué hace JSON to Zod
JSON to Zod convierte un JSON de ejemplo en un esquema Zod para validar datos en tiempo de ejecución con TypeScript. Primero infiere un árbol de esquema independiente de la librería y después lo emite como código Zod, cubriendo cadenas, números, booleanos, null, objetos anidados, arrays y arrays de objetos. La descarga es un módulo .ts listo para importar con import { z } from "zod", el esquema exportado y un tipo exportado creado con z.infer.
Cómo usarlo
- 1.Pega JSON de ejemplo, carga un archivo .json, arrástralo al editor o carga el ejemplo.
- 2.Define el nombre del esquema raíz, por ejemplo UserSchema; el tipo exportado será User.
- 3.Revisa el código generado y los avisos sobre tipos inciertos.
- 4.Copia el código o descárgalo como archivo .ts. Borrar vacía el editor.
Cómo se infieren los tipos
- •Se revisan todos los elementos de cada array, no solo el primero. Los elementos de tipos distintos se convierten en z.union([...]).
- •Los objetos de un mismo array se combinan: una clave ausente en algunos objetos pasa a .optional() y una clave que a veces es null se convierte en una unión con z.null().
- •Un array vacío no aporta información, así que sus elementos son z.unknown() y se muestra un aviso.
- •Un valor que siempre es null queda como z.null() con un aviso, porque el tipo real no se puede deducir del ejemplo.
- •Las claves siempre van entre comillas, así que nombres como "user-id" o "__proto__" se manejan de forma segura.
Límites y precisión
Un ejemplo muestra cómo eran los datos una vez, no el contrato completo. Añade tú mismo formatos (email, url, datetime), enums, min/max o .strict() cuando tu API los garantice. Los enteros fuera del rango seguro de JavaScript se señalan porque pierden precisión al analizarlos. La entrada admite hasta 5 MiB y 256 niveles de anidación, y todo se ejecuta en tu navegador.
