Nouplo

JSON a tipos

Una muestra por un lado, un tipo por el otro.

Los ejemplos sustituyen temporalmente la entrada y los ajustes. Puedes recuperar tu trabajo anterior.

0 caracteres
Resultado
Pega o escribe arriba para ver el resultado aquí.

Tus archivos se quedan en tu dispositivo

Esta herramienta se ejecuta por completo en tu navegador. Lo que pegas se procesa en tu dispositivo y nunca se envía a un servidor, así que puedes usarla con tokens, claves y textos sin publicar.

Ejemplo

Ejemplo: una factura con IVA del 21 % convertida en esquema Zod para validarla

Una gestoría que programa su propia aplicación recibe facturas en JSON y quiere validarlas antes de guardarlas. Pega la factura F-2026-0153 del 15/10/2026: cliente Talleres Ruiz S.L. con su NIF, dos líneas (revisión anual, 120 €, y dos filtros de aceite a 9,50 €, esta con una nota), base 139 €, cuota de IVA 29,19 € y total 168,19 €. Ajustes: Zod, nombre Factura, sangría de 2 espacios.

  1. Cada objeto recibe su propio esquema: cliente se llama Cliente y cada elemento de lineas, Linea, el nombre del campo sin la s final.
  2. notas solo aparece en una de las dos líneas, así que queda z.string().optional(): una línea sin nota sigue siendo válida.
  3. Los esquemas salen en orden inverso, Linea y Cliente antes que Factura, porque en Zod un esquema tiene que estar declarado antes de usarse.
  4. Importes y porcentajes (120, 9.5, 21, 168.19) quedan como z.number(). En JSON el decimal va con punto: 9,50 con coma no sería JSON válido.
Campo En la factura Esquema
numero "F-2026-0153"z.string()
fecha "2026-10-15"z.string()
cliente nombre y nifCliente
lineas 2 líneasz.array(Linea)
notas (en Linea) en 1 de las 2 líneasz.string().optional()
iva 21, 21z.number()
total 168.19z.number()

3 esquemas (Linea, Cliente y Factura) y una última línea que declara el tipo Factura con z.infer: con Factura.parse(datos) se valida y el mismo nombre sirve de tipo. Para afinar a mano: iva podría limitarse a 4, 10 o 21, y fecha a una fecha válida; una sola muestra no puede saberlo.

Cómo funciona

  1. Pega una respuesta real. Un registro de verdad vale más que uno inventado.
  2. Elige TypeScript, Go o Zod.
  3. Ponle nombre al tipo principal o deja Root.
  4. Copia el resultado y léelo: inferir desde una muestra da un primer borrador, no una especificación.

Preguntas frecuentes

¿Mira todos los elementos del array o solo el primero?
Todos. [{a:1},{a:1,b:2}] deja b como opcional en vez de fingir que no existe, que es justo el fallo que vuelve molestos los tipos generados dos semanas después.
¿Qué hace con null?
Amplía en lugar de estrechar. Un campo que alguna vez fue null es un campo que puede ser null: en TypeScript pasa a ser una unión y en Go un puntero. Casi siempre es lo que hace la API de verdad.
¿Me puedo fiar del resultado?
Como punto de partida. Una muestra no puede decirte que un campo es un enum, que un número es entero o que una cadena es una fecha: léelo y ajústalo. Ahorra el tecleo, no el pensar.
¿Cómo saco el tipo de TypeScript del esquema Zod?
Ya viene hecho: la última línea declara un tipo con el mismo nombre que el esquema principal, sacado con z.infer, así que el mismo nombre sirve para validar con .parse() y para tipar. Los esquemas internos salen antes porque en Zod un esquema debe declararse antes de usarse.
¿Por qué los números salen como number, o float64 en Go, y nunca como entero?
Porque una muestra no demuestra que un número sea siempre entero: el 24 de hoy puede ser 24.5 mañana. TypeScript y Zod escriben number y Go escribe float64. Si un id o una cantidad son siempre enteros, cámbialos a int o int64 en Go, o añade .int() en Zod.
¿Se envía algo a un servidor?
No. Funciona en tu navegador, así que lo que pegues se queda en tu ordenador.

Herramientas relacionadas