JSON a Dataclass de Python

Pega un ejemplo de JSON y obtén un @dataclass (o BaseModel de Pydantic) con sugerencias de tipo para cada campo, str, int, float, bool, Optional[...] y List[...] donde sea apropiado. Los objetos anidados se convierten en sus propias dataclasses. La salida está formateada según PEP 8 y lista para pegar en un archivo de Python.

Cómo convertir JSON a una dataclass

  1. 1

    Pega el JSON

    Un solo ejemplo funciona; múltiples ejemplos mejoran la detección de nulabilidad.

  2. 2

    Elige el estilo

    `@dataclass` de la biblioteca estándar, `BaseModel` de Pydantic, o `TypedDict` solo para verificación de tipos estáticos.

  3. 3

    Elige la versión de Python

    3.9+ para la sintaxis `list[str]`, 3.10+ para tipos de unión `|`, 3.8 para `Optional[...]` / `List[...]`.

  4. 4

    Copia el código

    Una clase raíz más las anidadas. Pega en un archivo `.py` e importa.

Ejemplo de salida: @dataclass estándar

Entrada:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Salida (Python 3.10+):

from dataclasses import dataclass, field
from typing import Optional


@dataclass
class User:
    first_name: str
    age: int
    tags: list[str] = field(default_factory=list)
    email: Optional[str] = None

Misma entrada con Pydantic

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

Mapeo de tipos

Valor JSON Tipo Python
cadena str
entero int
número (decimal) float
booleano bool
nulo (visto solo) None
nulo + otro tipo Optional[T]
cadena de fecha ISO date (Python 3.7+)
fecha y hora ISO datetime
array de un tipo list[T]
array mixto list[Union[T1, T2]]
objeto Clase anidada

Dataclass vs Pydantic vs TypedDict

Variante Cuándo usar
@dataclass Solución de biblioteca estándar, sin validación en tiempo de ejecución
Pydantic Validación y coerción en tiempo de ejecución (FastAPI, configuraciones)
TypedDict Solo verificación de tipos estáticos, sin clase de instancia
attrs Proyectos heredados que estandarizaron en attrs

Errores comunes

  • Olvidar default_factory para valores mutables. Un valor por defecto list[str] = [] es una trampa de dataclass (compartido entre instancias). Usa field(default_factory=list).
  • Opcional sin valor por defecto. email: Optional[str] sin = None aún requiere el argumento. Coincide con la semántica de tu JSON.
  • Pydantic v1 vs v2. La sintaxis y los comportamientos difieren (clase Config vs model_config, validator vs field_validator). El generador predetermina v2.
  • El orden de la unión importa para la deserialización. Pydantic prueba tipos en el orden de declaración. Coloca el más específico primero (por ejemplo, int antes de str) si es posible la ambigüedad.

Preguntas frecuentes

Dataclass para contenedores de valores simples sin validación. Pydantic cuando deseas validación en tiempo de ejecución, coerción o integración con FastAPI. TypedDict cuando solo necesitas verificación de tipos estáticos (mypy, pyright) y no deseas instancias de clase.

No para Python 3.10+ donde las uniones | y la sintaxis list[str] son nativas. Útil para proyectos 3.7-3.9 para usar la nueva sintaxis a través de las anotaciones de cadena PEP 563. El generador advierte cuando es necesario.

Cada objeto anidado se convierte en su propia clase. La clase raíz los referencia por nombre, por lo que puedes reutilizar tipos. Se detectan y marcan referencias circulares.

Sí, si eliges la variante de Pydantic. FastAPI utiliza modelos de Pydantic como tipos de solicitud/respuesta directamente. Para el intercambio de datos interno, @dataclass es más ligero.

Herramientas relacionadas

Herramienta disponible en otros idiomas