Qué hace esta herramienta
Una muestra JSON pasa a ser clases de Python, una por objeto.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
from pydantic import BaseModel, Field
class Address(BaseModel):
city: str
class Root(BaseModel):
id: int
first_name: str = Field(alias="firstName")
address: Address
Los hijos se declaran primero: una clase debe existir antes de que otra anote un campo con ella. La salida apunta a un Python moderno: list[str] e int | str se escriben directamente, lo que exige 3.10 o posterior.
Tres estilos, tres costes distintos
| estilo | lo que te da | lo que cuesta |
|---|---|---|
| Pydantic | validación en la frontera, alias para las claves renombradas | una dependencia y objetos que no son llanos |
| dataclass | un contenedor simple, solo biblioteca estándar | ninguna validación y ningún alias para una clave renombrada |
| TypedDict | anotaciones para los diccionarios que ya tienes | nada en ejecución, y por tanto tampoco comprobación |
La estructura es idéntica en los tres; lo que cambia es cuánto hace el tipo por ti.
Las palabras reservadas ya no rompen el archivo
{"class": 1} producía:
class Root(BaseModel):
class: int
que no es Python: el archivo ni siquiera se analiza. Las palabras reservadas reciben ahora un guion bajo, y el alias de Pydantic conserva la clave:
class_: int = Field(alias="class")
Era un defecto real, encontrado al escribir esta página y corregido. TypedDict lo resuelve de otro modo: una clave que no puede ser nombre de atributo hace que toda la definición pase a la sintaxis funcional, Root = TypedDict('Root', {"class": int}), donde las claves son cadenas y todo cabe.
Lo que una muestra no puede decirte
Nada es | None y nada tiene valor por defecto: todos los campos son obligatorios, porque la muestra los traía. Un null da el tipo None, que no acepta nada más; si el campo es «una cadena, a veces nula», el retoque es str | None, y = None si puede faltar.
Dos claves que dan el mismo snake_case —fooBar y foo_bar— se mantienen separadas con un sufijo numerado en vez de fundirse, y el alias deja constancia de cuál era cuál.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.