JSON a Python
Genera clases TypedDict de Python a partir de una muestra JSON para mypy, Pyright y el autocompletado del editor.
Entrada JSON
Código generado
Escribe JSON a la izquierda para generar un tipo a partir de él.
¿Qué es JSON a Python?
Un conversor de JSON a Python convierte una muestra de un documento JSON en definiciones de clases Python tipadas — aquí, clases TypedDict que describen la forma exacta de un diccionario parseado por json.loads. Python te devolverá sin queja un dict plano desde cualquier payload JSON, lo cual es cómodo justo hasta que necesitas saber qué hay realmente dentro: en ese punto cada acceso a una clave es una suposición, las erratas solo aparecen en tiempo de ejecución y tu editor no puede ofrecer autocompletado alguno. Declarar la forma como un TypedDict da a mypy, Pyright y a tu IDE información suficiente para autocompletar claves, cazar errores de tecleo antes de que el código se ejecute y marcar cuando un campo se usa con el tipo equivocado — mientras que el valor sigue siendo un dict ordinario en tiempo de ejecución, así que nada cambia en cómo parseas o pasas los datos.
Cómo usar JSON a Python
- Pega un payload JSON representativo en el panel izquierdo — las clases generadas reflejan exactamente las claves presentes en esa muestra.
- Fija un nombre de clase raíz sobre la salida (por defecto "Root"); cada objeto anidado se convierte en su propia clase, con el nombre de la clave que lo contiene.
- Copia las clases a un módulo y anota tu código de parseo, por ejemplo `data: Root = json.loads(raw)`.
- Usa el selector de lenguaje sobre la salida para generar la misma forma como un struct de Go, struct de Rust o un tipo TypeScript.
Ejemplos
Objeto plano como TypedDict
Entrada
{"id": 1, "name": "Ada", "active": true}
Salida
from typing import TypedDict class Root(TypedDict): id: int name: str active: bool
Un objeto anidado se convierte en su propia clase
Entrada
{"user": {"id": 1, "name": "Ada", "roles": ["admin"]}}
Salida
from typing import TypedDict class User(TypedDict): id: int name: str roles: list[str] class Root(TypedDict): user: User
Errores comunes
- Asumir que un TypedDict rechaza datos malos en tiempo de ejecución — no lo hace, así que una API que cambia de forma te seguirá entregando un dict equivocado sin ningún error hasta que algo aguas abajo se rompa.
- Copiar la sintaxis `list[str]` a un proyecto con Python 3.8 o anterior, donde lanza un TypeError en la importación salvo que esté presente `from __future__ import annotations`.
- Generar desde una muestra donde las claves opcionales casualmente están ausentes, produciendo una clase que no marca nada como NotRequired y da una confianza falsa sobre lo que el payload siempre contiene.
Por qué usar esta herramienta
- Da a los editores y a mypy/Pyright autocompletado real de claves y detección de erratas sobre datos que de otro modo serían un dict opaco.
- No añade sobrecarga ni dependencia en tiempo de ejecución — el valor parseado sigue siendo un dict plano, así que el código de parseo existente no cambia.
- Se ejecuta íntegramente en el cliente, así que un payload copiado de un servicio Django o FastAPI se queda en local mientras se generan estos TypedDicts.