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
Pega el JSON
Un solo ejemplo funciona; múltiples ejemplos mejoran la detección de nulabilidad.
-
2
Elige el estilo
`@dataclass` de la biblioteca estándar, `BaseModel` de Pydantic, o `TypedDict` solo para verificación de tipos estáticos.
-
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
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_factorypara valores mutables. Un valor por defectolist[str] = []es una trampa de dataclass (compartido entre instancias). Usafield(default_factory=list). - Opcional sin valor por defecto.
email: Optional[str]sin= Noneaún requiere el argumento. Coincide con la semántica de tu JSON. - Pydantic v1 vs v2. La sintaxis y los comportamientos difieren (clase
Configvsmodel_config,validatorvsfield_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,
intantes destr) 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
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.
Generador de EditorConfig
Genera un archivo .editorconfig con tu estilo y tamaño de indentación, fin de línea, charset y reglas de espacios para un formato consistente en IDEs y editores.
Herramienta disponible en otros idiomas
- JSON zu Python Dataclass [DE]
- JSON vers Dataclass Python [FR]
- JSON till Python-dataklass [SV]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON ke Dataclass Python [ID]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]