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. 1

    Cole o JSON

    Um único exemplo funciona; múltiplos exemplos melhoram a detecção de nulabilidade.

  2. 2

    Escolha o estilo

    Biblioteca padrão `@dataclass`, `BaseModel` do Pydantic, ou `TypedDict` apenas para verificação de tipo estática.

  3. 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. 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_factory para padrões mutáveis. Um padrão list[str] = [] é uma armadilha de dataclass (compartilhado entre instâncias). Use field(default_factory=list).
  • Opcional sem padrão. email: Optional[str] sem = None ainda requer o argumento. Combine com a semântica do seu JSON.
  • Pydantic v1 vs v2. A sintaxe e os comportamentos diferem (classe Config vs model_config, validator vs field_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, int antes de str) 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

Ferramenta disponível em outros idiomas