JSON Schema → Pydantic
Converti JSON Schema in codice modello Pydantic v2, nel tuo browser. Incolla lo schema, ottieni una classe Python pronta da incollare. Utile per flussi LLM con structured output.
Inserisci un input sopra per vedere il risultato.
A cosa serve?
JSON Schema e Pydantic sono i due modi principali per descrivere un oggetto strutturato — JSON Schema è la lingua franca per OpenAPI, function calling LLM e structured output; Pydantic è la libreria di validazione di fatto in Python. Spesso hai uno e ti serve l'altro. Questo strumento fa la conversione in una direzione: incolla un JSON Schema, ottieni una classe Pydantic pronta da incollare in un .py.
Quando usarlo
- Structured output LLM. Il
response_formatdi OpenAI e il tool-use di Anthropic prendono entrambi JSON Schema. Dopo averlo progettato, di solito vuoi un modello Pydantic per validare e accedere ai campi in Python. - Generazione client OpenAPI. Una spec OpenAPI ti dà JSON Schema per body; via rapida a modelli Pydantic senza un generatore completo.
- Migrazione Schema → Python. Hai ereditato un sistema con validazione JSON Schema da spostare a Pydantic. Incolla ogni schema, ottieni classe iniziale, rifinisci.
- Scaffolding veloce. Forma abbozzata in JSON in un notebook; trasformala in modello vero con un incolla.
Cosa gestisce
type: objectconproperties+required— classe BaseModel annidata.type: arrayconitems—List[X].- Primitivi:
string→str,integer→int,number→float,boolean→bool,null→None. formatsu string:date-time→datetime,email→EmailStr,uri/url→HttpUrl,uuid→UUID.enum→Literal[...];const→Literal[X].oneOf/anyOf→Union[...]; variante null si ripiega inOptional[...].type: ["string", "null"]→Optional[str].description→Field(..., description=...).default→ default del campo.minimum/maximum/minLength/maxLength→Field(ge=..., le=..., min_length=..., max_length=...).- Nomi non validi in Python vengono sanificati e
alias=aggiunto; modello conpopulate_by_name=True. - Oggetti annidati → classi annidate, denominate per
titlese presente, altrimenti per il campo. $defs/definitions→ classi separate.
Cosa non gestisce (ancora)
$refesterni (URL). Ref locali a$defsfunzionano.patternProperties— commento TODO.additionalPropertiescon schema — commento TODO.- Composizione
allOfmulti-base.allOfa singolo elemento è spacchettato. - Validatori custom su
pattern— il campo esce, la regex no. Aggiungi@field_validatordopo se serve.
Trappole comuni
- Pydantic v2 vs v1. Default v2. Cambia col dropdown se sei su v1.
- L'output è un punto di partenza. Revisionalo, specialmente union complesse e tipi ricorsivi.
- I nomi contano. Il campo "Root class name" controlla il nome della classe top-level. Sotto-classi:
titleo nome di campo. - Required vs Optional in v2. Required senza default usa
.... Optional cade aNoneavvolto inOptional[T].