JSON para Dataclass em Python
Cole um exemplo de JSON e obtenha um @dataclass (ou BaseModel do Pydantic) com dicas de tipo para cada campo, str, int, float, bool, Optional[...] e List[...] onde apropriado. Objetos aninhados se tornam suas próprias dataclasses. A saída é formatada em PEP 8 e pronta para colar em um arquivo Python.
Como converter JSON em uma dataclass
-
1
Cole o JSON
Um único exemplo funciona; múltiplos exemplos melhoram a detecção de nulabilidade.
-
2
Escolha o estilo
Biblioteca padrão `@dataclass`, `BaseModel` do Pydantic, ou `TypedDict` apenas para verificação de tipo estática.
-
3
Escolha a versão do Python
3.9+ para a sintaxe `list[str]`, 3.10+ para tipos de união `|`, 3.8 para `Optional[...]` / `List[...]`.
-
4
Copie o código
Uma classe raiz mais classes aninhadas. Cole em um arquivo `.py` e importe.
Exemplo de saída: @dataclass padrão
Entrada:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Saída (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
Mesma entrada com Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
Mapeamento de tipos
| Valor JSON | Tipo Python |
|---|---|
| texto | str |
| inteiro | int |
| número (decimal) | float |
| booleano | bool |
| nulo (visto sozinho) | None |
| nulo + outro tipo | Optional[T] |
| texto de data ISO | date (Python 3.7+) |
| data e hora ISO | datetime |
| array de um tipo | list[T] |
| array misto | list[Union[T1, T2]] |
| objeto | Classe aninhada |
Dataclass vs Pydantic vs TypedDict
| Tipo | Quando usar |
|---|---|
@dataclass |
Solução da biblioteca padrão, sem validação em tempo de execução |
| Pydantic | Validação em tempo de execução e coerção (FastAPI, configurações) |
TypedDict |
Apenas verificação de tipo estática, sem classe de instância |
attrs |
Projetos legados que padronizaram em attrs |
Erros comuns
- Esquecer
default_factorypara padrões mutáveis. Um padrãolist[str] = []é uma armadilha de dataclass (compartilhado entre instâncias). Usefield(default_factory=list). - Opcional sem padrão.
email: Optional[str]sem= Noneainda requer o argumento. Combine com a semântica do seu JSON. - Pydantic v1 vs v2. A sintaxe e os comportamentos diferem (classe
Configvsmodel_config,validatorvsfield_validator). O gerador padrão é v2. - A ordem da união importa para a desserialização. O Pydantic tenta tipos na ordem de declaração. Coloque o mais específico primeiro (por exemplo,
intantes destr) se a ambiguidade for possível.
Perguntas frequentes
Dataclass para simples armazenadores de valor sem validação. Pydantic quando você deseja validação em tempo de execução, coerção ou integração com FastAPI. TypedDict quando você só precisa de verificação de tipo estática (mypy, pyright) e não deseja instâncias de classe.
Não para Python 3.10+ onde as uniões | e a sintaxe list[str] são nativas. Útil para projetos 3.7-3.9 para usar a sintaxe mais nova via anotações de string PEP 563. O gerador avisa quando é necessário.
Cada objeto aninhado se torna sua própria classe. A classe raiz os referencia pelo nome, para que você possa reutilizar tipos. Referências circulares são detectadas e sinalizadas.
Sim, se você escolher o tipo Pydantic. FastAPI usa modelos Pydantic como tipos de solicitação/resposta diretamente. Para troca de dados interna, @dataclass é mais leve.
Ferramentas relacionadas
Referência da Tabela ASCII
Tabela ASCII completa de 0 a 127 com valores decimais, hexadecimais, octais e binários e notação de referência numérica HTML, incluindo NUL, LF e DEL.
Referência de Caracteres HTML
Lista pesquisável de entidades HTML, seus códigos nomeados e numéricos, e uma cópia com um clique para caracteres e símbolos especiais.
Referência de atalhos de teclado
Pesquise atalhos padrão documentados do VS Code, Chrome e Bash com GNU Readline no macOS, Windows e Linux.
Gerador de EditorConfig
Gere um arquivo .editorconfig com suas regras de estilo e tamanho de indentação, fim de linha, charset e espaços em branco para formatação consistente entre IDEs e editores.
Validador de Email
Valide um endereço de email: verificação de sintaxe RFC 5322, consulta de registro MX em tempo real, além de detalhes de parte local, domínio e comprimento. Nenhum email é enviado.
Formatador de HTML
Formate HTML localmente no navegador com indentação de dois ou quatro espaços. O HTML não é enviado nem validado.
Ferramenta disponível em outros idiomas
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON a Dataclass de Python [ES]
- JSON till Python-dataklass [SV]
- فئة بيانات من JSON إلى بايثون [AR]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON zu Python Dataclass [DE]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON vers Dataclass Python [FR]
- JSON ke Dataclass Python [ID]
- JSON do klasy danych w Pythonie [PL]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]