Convertidor de JSON a Python

Pega una respuesta de API o una configuración en JSON y obtén sus definiciones de tipos en Python. Elige @dataclass para objetos que creas en tu código o TypedDict para tipar diccionarios normales de json.loads. Los objetos anidados se convierten en clases propias, y las claves que faltan en algunos elementos pasan a ser opcionales.

Generar

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo usarlo

  1. Pega un ejemplo de JSON. Usa uno realista: cuantos más elementos tenga un array, mejor se detectan las claves opcionales.
  2. Elige @dataclass o TypedDict.
  3. Copia el código. Las clases de los objetos anidados van primero, así que el archivo se ejecuta de arriba abajo.

Cómo funciona

El ejemplo se lee como una estructura: cada clave de cada objeto con todos los tipos que aparecen en ella. Todos los objetos de un mismo array se fusionan en una sola clase.

  • str, int, float, bool, list[…] y las clases anidadas se escriben directamente; null añade Optional[…].
  • Los nombres de clase salen de la clave: «orders» contiene una lista de Order y «billing_address» pasa a BillingAddress. El nivel superior es Root.
  • Solo se importa lo que se usa: dataclass, Any, Optional, TypedDict, NotRequired.

Ejemplo resuelto

{"items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} con @dataclass da:

from dataclasses import dataclass
from typing import Optional


@dataclass
class Item:
    sku: str
    note: Optional[str]
    qty: Optional[int] = None


@dataclass
class Root:
    items: list[Item]

«note» a veces es null, así que es Optional[str]. «qty» falta en el segundo elemento, así que recibe un valor por defecto y pasa al final.

Consejos

  • Revisa los tipos de los campos en los que el ejemplo tuvo suerte: un precio de 10 en el ejemplo pasa a int aunque en otros datos pueda ser 9.99.
  • Cambia el nombre de las clases para que encajen con tu dominio después de generarlas.
  • Para JSON Schema o TypeScript, usa el generador de JSON Schema o JSON a TypeScript.

Preguntas frecuentes

¿Cómo se traducen los tipos de JSON a Python?

Las cadenas pasan a str, true y false a bool, los números enteros a int y los demás números a float (una mezcla de ambos da float). Los arrays pasan a list[...], los objetos a clases y null hace el tipo Optional[...]. Un lugar con valores de distinto tipo pasa a Any.

¿Cómo se tratan las claves opcionales?

Cuando un array contiene varios objetos, una clave que falta en algunos es opcional. En una dataclass pasa a Optional[...] = None y se mueve detrás de los campos obligatorios, como exigen las dataclasses; en un TypedDict se envuelve en NotRequired[...].

¿Qué pasa con las claves que no son nombres válidos en Python?

En una dataclass, claves como first-name, class o 2fa pasan a first_name, class_ y f_2fa, con la clave JSON original en un comentario. En un TypedDict la sintaxis funcional TypedDict('Name', {...}) conserva las claves tal cual.

¿Qué versión de Python necesito?

El código usa list[...] y Optional de typing, que funcionan en Python 3.9 y posteriores. NotRequired, que marca las claves opcionales de TypedDict, necesita Python 3.11 o typing_extensions.

¿Una dataclass interpreta el JSON anidado por mí?

No. Root(**data) solo rellena el nivel superior; los diccionarios anidados siguen siendo diccionarios. Convierte tú las partes anidadas o usa una biblioteca como pydantic o dacite.

Más en Desarrollo

Todas las herramientas de la categoría: Desarrollo ·Actualizado el 4 de noviembre de 2026

Opciones de privacidad

Google Analytics nos muestra qué herramientas se usan y si funcionan. Puede usar cookies. Tu elección se guarda en este navegador.