JSON Schema → Pydantic
Convierte JSON Schema a código de modelos Pydantic v2 en tu navegador. Pega el schema, obtén una clase Python lista para pegar. Útil para flujos LLM con structured output.
Introduce un valor arriba para ver el resultado.
¿Para qué sirve?
JSON Schema y Pydantic son las dos formas principales de describir un objeto estructurado — JSON Schema es la lingua franca para OpenAPI, function calling de LLMs y structured outputs; Pydantic es la librería de validación de facto en Python. A menudo tienes uno y necesitas el otro. Esta herramienta hace la conversión en una dirección: pega un JSON Schema, obtén una clase Pydantic lista para soltar en un .py.
Cuándo usarla
- Structured outputs de LLM. El
response_formatde OpenAI y el tool-use de Anthropic toman JSON Schema. Tras diseñarlo, normalmente quieres un modelo Pydantic para validar y acceder a campos. - Generación de clientes OpenAPI. Una spec OpenAPI te da JSON Schema por body; esto es una vía rápida a modelos Pydantic sin un generador completo.
- Migración Schema → Python. Heredas un sistema con validación por JSON Schema y quieres pasar a Pydantic. Pega cada schema, obtén clase de partida, refina.
- Scaffolding rápido. Esbozaste la forma en JSON en un notebook; conviértelo en modelo real con un pegado.
Qué maneja
type: objectconproperties+required— clase BaseModel anidada.type: arrayconitems—List[X].- Primitivos:
string→str,integer→int,number→float,boolean→bool,null→None. formaten string:date-time→datetime,email→EmailStr,uri/url→HttpUrl,uuid→UUID.enum→Literal[...];const→Literal[X].oneOf/anyOf→Union[...]; variante null se pliega aOptional[...].type: ["string", "null"]→Optional[str].description→Field(..., description=...).default→ default del campo.minimum/maximum/minLength/maxLength→Field(ge=..., le=..., min_length=..., max_length=...).- Identificadores no válidos en Python se sanean y se añade
alias=; el modelo llevapopulate_by_name=True. - Objetos anidados → clases anidadas, con nombre del
titlesi está, si no del campo. $defs/definitions→ clases separadas.
Lo que no maneja (todavía)
$refexternos (URLs). Los locales a$defssí.patternProperties— comentario TODO.additionalPropertiescon schema — comentario TODO.allOfmulti-base.allOfde un elemento se desenvuelve.- Validadores custom con
pattern— el campo se emite, el regex se omite. Añade@field_validatortras pegar si lo necesitas.
Errores comunes
- Pydantic v2 vs v1. Por defecto v2. Cambia con el dropdown si tu codebase es v1.
- La salida es un punto de partida. Revísala, especialmente uniones complejas y tipos recursivos.
- Los nombres importan. El campo "Root class name" controla el nombre de la clase top-level. Las sub-clases usan
titleo el nombre de campo. - Required vs Optional en v2. Required sin default usa
.... Optional cae aNoneenvuelto enOptional[T].