JSON a clase Python
Pega un objeto JSON o una respuesta de API y obtén clases de Python tipadas: dataclasses estándar con un cargador from_dict(), modelos Pydantic v2 con alias o TypedDicts. Los objetos anidados se convierten en sus propias clases, y todo se ejecuta en tu navegador.
Última actualización:
Tu JSON se analiza localmente en esta pestaña y nunca se sube. Consejo: Ctrl + Intro genera el código.
Cómo usar JSON a clase Python
- Pega tu JSON en el cuadro de la izquierda o abre un archivo .json. Para empezar se carga un ejemplo.
- Elige un estilo de salida: dataclass, modelo Pydantic o TypedDict.
- Configura las opciones: nombre de la clase raíz, estilo de anotaciones de tipo, nombres en snake_case, ayudante from_dict() y detección de datetime.
- Pulsa Generar clases Python. Con Actualización en vivo activada, el código se actualiza mientras escribes.
- Copia o descarga el archivo .py y carga tus datos, por ejemplo con Root.from_dict(json.loads(text)) o Root.model_validate_json(text).
Ejemplo: un objeto JSON, tres estilos de Python
A partir de {"userId": 7, "name": "Ada", "tags": ["admin"], "nick": null}, el generador produce lo siguiente (anotaciones modernas). nick es Any porque en el ejemplo siempre es null; con un valor en otro registro pasaría a ser str | None.
| Estilo | Clase generada | Cargar JSON con |
|---|---|---|
| @dataclass | user_id: intname: strtags: list[str]nick: Any = None | Root.from_dict(json.loads(text)) |
| Pydantic v2 | user_id: int = Field(alias="userId")name: strtags: list[str]nick: Any = None | Root.model_validate_json(text) |
| TypedDict | userId: intname: strtags: list[str]nick: Any | data: Root = json.loads(text) |
Cómo se asignan los tipos JSON a anotaciones de tipo de Python
| Valor JSON | Python 3.10+ | Python 3.8 / 3.9 (typing) |
|---|---|---|
"text" | str | str |
"2024-05-01T09:30:00Z" | datetime | datetime |
42 / 4.2 | int / float | int / float |
true | bool | bool |
"x" o null | str | None | Optional[str] |
["a", "b"] | list[str] | List[str] |
{ … } con claves | Clase anidada | Clase anidada |
{} | dict[str, Any] | Dict[str, Any] |
| Tipos mixtos, o siempre null | Any | Any |
Consejos
- Pega un array con varios registros en lugar de un solo objeto: así se detectan las claves que faltan en algunos registros y se vuelven opcionales automáticamente.
- Las dataclasses no validan. Confían en los datos que les das. Si el JSON viene de una API externa, Pydantic detecta tipos incorrectos y campos que faltan al cargar, con mensajes de error claros.
- Serializa de nuevo con alias. Con Pydantic, llama a
model.model_dump(by_alias=True)omodel_dump_json(by_alias=True)para recuperar las claves originales en camelCase. - Ajusta los tipos a mano. Un campo que siempre es null se tipa como
Any; sustitúyelo por el tipo real y restringe las cadenas aLiteral["a", "b"]cuando los valores sean fijos.
Preguntas frecuentes
Dataclass, Pydantic o TypedDict: ¿cuál debo elegir?
Las dataclasses están en la biblioteca estándar y te dan objetos reales sin dependencias, pero no validan los tipos. Los modelos Pydantic analizan y validan los datos en tiempo de ejecución, convierten tipos como las cadenas de fecha y hora a datetime, y son la opción habitual para clientes de API y FastAPI. TypedDict solo añade anotaciones de tipo a diccionarios normales, lo que es ideal cuando sigues trabajando con la salida de json.loads() y solo quieres comprobación de tipos.
¿Cómo se gestionan las claves en camelCase?
Con los nombres de campo en snake_case activados, firstName se convierte en first_name. En Pydantic, cada campo renombrado recibe Field(alias="firstName") y populate_by_name=True, así que el modelo lee las claves JSON originales y puedes seguir usando los nombres de Python. En las dataclasses, el ayudante from_dict() asigna cada clave JSON a su atributo. Las claves de TypedDict deben coincidir exactamente con el JSON, así que nunca se renombran.
¿Por qué algunos campos se mueven al final de una dataclass?
Python exige que los campos de una dataclass con valores predeterminados vayan después de los campos sin valor predeterminado. Los campos opcionales tienen None como valor predeterminado, así que el generador lista primero los campos obligatorios y después los opcionales.
¿Cómo se tipan los campos opcionales y anulables?
Una clave que falta en algunos elementos del array, o que contiene null, se tipa como str | None (u Optional[str]) con None como valor predeterminado. En un TypedDict, una clave que puede faltar se envuelve en NotRequired[...], lo que requiere Python 3.11 o el paquete typing_extensions.
¿Qué versión de Python necesito?
Las anotaciones modernas como list[str] y str | None funcionan en tiempo de ejecución en Python 3.10 y posteriores. Elige el estilo del módulo typing (List[str], Optional[str]) para Python 3.8 y 3.9. La salida de Pydantic está pensada para Pydantic v2.
¿Las fechas se convierten a datetime?
Cuando la opción está activada, los campos de texto cuyos valores son todos fechas y horas ISO 8601 se tipan como datetime. Pydantic los analiza automáticamente; el ayudante from_dict() de la dataclass usa datetime.fromisoformat convirtiendo Z en +00:00, así que también funciona antes de Python 3.11.
¿Se sube mi JSON?
No. El JSON se analiza y el código Python se genera con JavaScript que se ejecuta en esta página, así que tus datos nunca salen de tu dispositivo.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.
Herramientas relacionadas
Ver todas las de Conversores de datos y formatos de archivo →