Genera interfaces TypeScript, esquemas Zod y modelos Pydantic desde un ejemplo JSON en esta página. La salida se comprueba con tsc --strict, Zod 3 y 4, y Pydantic 2 antes de publicarse.
Se ejecuta localmente en tu navegadorPega una respuesta de API, un fixture o un objeto de configuración. La muestra permanece en este navegador.
Generate from a JSON sample to create TypeScript types.
La inferencia se basa en la muestra proporcionada. Revisa IDs, valores nullable, cadenas de fecha y restricciones de negocio antes de usar los tipos generados en producción.
Pega un ejemplo JSON, ponle nombre al tipo raíz y pulsa Generar tipos: obtendrás la misma estructura en TypeScript, Zod y Pydantic, cada una en su pestaña. El ejemplo se procesa en esta página con el propio navegador; no se sube nada ni se envía en ninguna petición.
Los nombres inferidos se comprueban con compiladores reales antes de publicar: la salida TypeScript pasa tsc --strict, el esquema Zod valida su propio ejemplo con Zod 3 y Zod 4, y los modelos Pydantic se importan y validan el ejemplo con Pydantic 2.
Un objeto JSON se convierte en una interfaz (o en un alias de tipo cuando el ejemplo es un array o un valor suelto), los arrays en Array<…> y un objeto vacío en Record<string, unknown>. Zod recibe la misma estructura como esquema más un tipo z.infer, y Pydantic recibe una clase BaseModel por objeto con List, Optional, Union y Dict de typing.
La casilla Export declarations decide si las líneas de TypeScript y Zod llevan export; la salida de Pydantic es Python normal en ambos casos.
Se fusionan todas las entradas de un array: la clave que solo aparece en parte de los objetos queda opcional (role?: string en TypeScript, .optional() en Zod, Optional[…] = None en Pydantic) y la clave con valores de distinto tipo se convierte en una unión. Los objetos mezclados con escalares o con null también producen una unión, y null nunca oculta el otro tipo: se conserva a su lado.
Un array vacío es unknown / z.unknown() / List[Any], porque una muestra sin elementos no aporta información de tipo.
Las claves que Python no puede escribir conservan su grafía JSON como alias: {"a-b": 1} pasa a a_b con alias="a-b", y class, import o None pasan a class_, import_ o None_ para que el archivo se importe. Las claves model_config, model_dump y cualquier otra que empiece por model_ también reciben sufijo, porque Pydantic reserva ese espacio de nombres.
Dos claves que si no se fundirían en un solo campo se mantienen separadas: {"a-b": 1, "a_b": 2} da a_b y a_b_2 con sus propios alias, y los objetos anidados con nombres en conflicto reciben clases distintas.
Todo ocurre en la pestaña: la conversión no envía ninguna petición y el ejemplo desaparece al recargar. Un ejemplo de 2 MB se tipa en unos 0,35 s en Chrome.
Los tipos salen de un solo ejemplo, así que describen lo que contiene ese documento: las claves opcionales son las que faltan en parte del array, no las que tu API pueda omitir, y los textos siguen siendo string — no se adivinan formatos de correo, fecha ni UUID. El analizador JSON del navegador lee el ejemplo, así que los enteros mayores que 2^53 pierden precisión y acaban como float en la salida de Pydantic.