Conversor JSON para Python

Gere dataclasses Python a partir de JSON

Experimente um exemplo
Nome da classe raiz:

Entrada JSON

Saída Python

Roda localmente · Seguro para colar segredos
As dataclasses Python aparecerão aqui…

O que é a conversão de JSON para dataclass Python?

A conversão de JSON para dataclass Python pega um objeto JSON bruto e produz um conjunto de definições de dataclass Python com anotações de tipo precisas. O módulo dataclasses do Python, introduzido na PEP 557 (Python 3.7), gera os métodos __init__, __repr__ e __eq__ a partir dos campos anotados da classe. Ao trabalhar com APIs JSON, arquivos de configuração ou filas de mensagens, dataclasses oferecem à sua estrutura de dados uma forma tipada que editores e verificadores de tipos como mypy conseguem verificar em tempo de desenvolvimento.

O json.loads() do Python retorna dicts e listas simples. Isso funciona, mas sem informação de tipo: uma chave com erro de digitação retorna None em vez de lançar um erro, e o editor não consegue autocompletar nomes de campos. Dataclasses resolvem isso mapeando cada chave JSON para um campo nomeado e tipado. Objetos JSON aninhados se tornam definições separadas de dataclass, arrays se tornam anotações List[T], e valores null se tornam Optional[T] com valor padrão None.

Escrever essas definições manualmente é um trabalho mecânico. Você lê o JSON, determina o tipo de cada campo a partir do seu valor, converte chaves de camelCase ou snake_case para as convenções Python, e trata casos especiais como campos anuláveis e arrays de tipos mistos. Um conversor faz tudo isso em milissegundos. Você cola o JSON, obtém o código de dataclass correto e segue em frente.

Por que usar um conversor de JSON para Python?

Traduzir estruturas JSON em definições de classes Python manualmente significa adivinhar tipos a partir de dados de amostra, reordenar campos para que os obrigatórios venham antes dos opcionais, e atualizar tudo quando a API muda. Um conversor elimina esse atrito.

Geração instantânea de dataclass
Cole seu JSON e obtenha definições tipadas de dataclass Python em menos de um segundo. Objetos aninhados, listas e campos opcionais são tratados automaticamente.
🔒
Processamento com privacidade em primeiro lugar
A conversão ocorre inteiramente no seu navegador usando JavaScript. Seu JSON nunca sai da sua máquina. Chaves de API, tokens e registros de usuários permanecem privados.
📝
Anotações de tipo corretas
Cada campo gerado inclui uma anotação de tipo Python inferida a partir do valor JSON: str, int, float, bool, List[T] ou Optional[T] para valores nulos.
📦
Sem instalação ou cadastro
Abra a página e cole seu JSON. Nenhum ambiente Python é necessário, nenhum pacote pip para instalar, nenhuma conta para criar.

Casos de uso de JSON para Python

Desenvolvimento de Clientes de API REST
Gere dataclasses a partir de amostras de resposta de API. Cole o JSON retornado por um endpoint REST de terceiros e obtenha classes Python com tipagem segura prontas para usar com requests ou httpx.
Modelos de Requisição/Resposta no FastAPI
Parta do formato de um payload JSON e gere definições de dataclass. Converta-as em modelos Pydantic para obter validação automática nos handlers de rotas do FastAPI.
Schemas de Pipelines de Dados
Defina estruturas de registros tipados para pipelines ETL. Cole uma mensagem JSON de amostra do Kafka, RabbitMQ ou SQS e gere dataclasses que documentam o formato esperado.
Parsing de Arquivos de Configuração
Transforme arquivos de configuração JSON em classes Python tipadas. Carregue sua configuração com json.load() e construa uma instância de dataclass para autocompletar no editor e verificação de tipos.
Geração de Fixtures para Testes
Crie fixtures tipadas a partir de dados JSON de amostra. Engenheiros de QA podem colar snapshots de respostas de API e produzir definições de dataclass para uso em suítes de testes com pytest.
Aprendendo Anotações de Tipo Python
Estudantes podem colar qualquer estrutura JSON e ver como o Python a representa com type hints. O código gerado mostra List, Optional, classes aninhadas e valores padrão em contexto.

Mapeamento de Tipos JSON para Python

Cada valor JSON mapeia para uma anotação de tipo Python específica. A tabela abaixo mostra como o conversor traduz cada tipo JSON, com a sintaxe do módulo typing (Python 3.7+) e a sintaxe built-in disponível a partir do Python 3.10.

Tipo JSONExemploPython (typing)Python 3.10+
string"hello"strstr
number (integer)42intint
number (float)3.14floatfloat
booleantrueboolbool
nullnullOptional[str]str | None
object{"k": "v"}@dataclass classnested model
array of strings["a", "b"]List[str]list[str]
array of objects[{"id": 1}]List[Item]list[Item]
mixed array[1, "a"]List[Any]list[Any]

Referência do Decorator @dataclass

O decorator @dataclass aceita vários parâmetros que alteram o comportamento da classe gerada. Esta referência cobre as opções mais relevantes ao trabalhar com dados derivados de JSON.

Decorator / CampoComportamentoUsar Quando
@dataclassGenerates __init__, __repr__, __eq__ from field annotationsStandard dataclasses
@dataclass(frozen=True)Makes instances immutable (hashable, no attribute reassignment)Config objects, dict keys
@dataclass(slots=True)Uses __slots__ for lower memory and faster attribute accessPython 3.10+, large datasets
@dataclass(kw_only=True)All fields require keyword arguments in __init__Python 3.10+, many fields
field(default_factory=list)Sets a mutable default without sharing state between instancesList/dict/set defaults

dataclass vs Pydantic vs TypedDict

Python tem três formas comuns de definir estruturas tipadas a partir de JSON. Cada uma se encaixa em um caso de uso diferente. Dataclasses são a opção da biblioteca padrão sem dependências externas. Pydantic adiciona validação em tempo de execução. TypedDict anota dicts simples sem criar uma nova classe.

@dataclass
Biblioteca padrão (Python 3.7+). Gera __init__, __repr__ e __eq__. Sem validação em tempo de execução. Funciona com mypy e dataclasses-json para serialização. Ideal para estruturas de dados internas onde você controla a entrada.
BaseModel (Pydantic)
Biblioteca de terceiros. Valida tipos e restrições em tempo de execução. Faz o parsing de JSON diretamente via model_validate_json(). Escolha padrão para FastAPI, gerenciamento de configurações e qualquer código que receba entradas não confiáveis.
TypedDict
Biblioteca padrão (Python 3.8+). Adiciona type hints a dicts comuns. Nenhum __init__ ou método gerado. Os valores permanecem como acesso a dict simples. Use quando precisar de verificação de tipos, mas quiser manter a interface de dict, como em bases de código legadas.

Exemplos de Código

Estes exemplos mostram como usar dataclasses geradas em Python, como produzi-las programaticamente a partir de JavaScript, e como usar abordagens alternativas como Pydantic e ferramentas de linha de comando.

Python (dataclasses)
from dataclasses import dataclass
from typing import List, Optional
import json

@dataclass
class Address:
    street: str
    city: str
    zip: str

@dataclass
class User:
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
data = json.loads(raw)

# Reconstruct nested objects manually
addr = Address(**data["address"])
user = User(**{**data, "address": addr})
print(user.name)     # -> Alice
print(user.address)  # -> Address(street='123 Main St', city='Springfield', zip='12345')
JavaScript (generate Python from JSON)
// Minimal JSON-to-Python-dataclass generator in JS
function jsonToPython(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Optional[str]";
    if (typeof val === "string") return "str";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "float";
    if (typeof val === "boolean") return "bool";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      return first ? `List[${infer(first, fieldName + "Item")}]` : "List[Any]";
    }
    if (typeof val === "object") {
      const clsName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, clsName);
      return clsName;
    }
    return "Any";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => `    ${k}: ${infer(v, k)}`);
    classes.push(`@dataclass\nclass ${cls}:\n${fields.join("\n")}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

const data = { id: 1, name: "Alice", scores: [98, 85] };
console.log(jsonToPython(data, "User"));
// @dataclass
// class User:
//     id: int
//     name: str
//     scores: List[int]
Python (Pydantic BaseModel alternative)
from pydantic import BaseModel
from typing import List, Optional

class Address(BaseModel):
    street: str
    city: str
    zip: str

class User(BaseModel):
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

# Pydantic parses and validates JSON in one step
raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
user = User.model_validate_json(raw)
print(user.name)              # -> Alice
print(user.model_dump_json()) # -> re-serializes to JSON
CLI (datamodel-code-generator)
# Install the generator
pip install datamodel-code-generator

# Generate dataclasses from a JSON file
datamodel-codegen --input data.json --output models.py --output-model-type dataclasses.dataclass

# Generate Pydantic models instead
datamodel-codegen --input data.json --output models.py

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  datamodel-codegen --output-model-type dataclasses.dataclass
# Output:
# @dataclass
# class Model:
#     id: int
#     name: str
#     tags: List[str]

Perguntas Frequentes

Qual é a diferença entre uma dataclass Python e uma classe comum?
Uma dataclass usa o decorator @dataclass para gerar automaticamente os métodos __init__, __repr__ e __eq__ a partir das anotações de campo. Uma classe comum exige que você escreva esses métodos manualmente. Dataclasses reduzem o código repetitivo quando a classe serve principalmente para armazenar dados, que é o caso típico de estruturas derivadas de JSON.
Posso usar dataclasses com serialização JSON diretamente?
O módulo json da biblioteca padrão não consegue serializar instâncias de dataclass por padrão. Use dataclasses.asdict() para converter uma dataclass em um dict e, em seguida, passe-o para json.dumps(). Para mais controle, a biblioteca dataclasses-json adiciona os métodos .to_json() e .from_json(), e modelos Pydantic tratam a serialização nativamente.
Como o conversor lida com objetos JSON aninhados?
Cada objeto aninhado se torna uma definição separada de @dataclass. Se um campo JSON chamado "address" contiver um objeto com "street" e "city", o conversor cria uma dataclass Address e anota o campo pai como address: Address. Estruturas profundamente aninhadas produzem múltiplas definições de dataclass em ordem de dependência.
O que acontece quando um campo JSON é null?
Campos nulos são anotados como Optional[str] (ou o tipo apropriado se puder ser inferido do contexto) com valor padrão None. Campos com valores padrão devem vir após os campos obrigatórios em uma dataclass, por isso o conversor coloca os campos opcionais no final da definição da classe.
Existe diferença entre dataclasses e modelos Pydantic para JSON?
Dataclasses fazem parte da biblioteca padrão e não validam dados em tempo de execução. Modelos Pydantic validam tipos, aplicam restrições e conseguem fazer o parsing de strings JSON brutas diretamente. Se você recebe JSON de fontes externas e precisa rejeitar dados malformados, Pydantic é a melhor escolha. Para passagem de dados internos onde você confia na entrada, dataclasses são mais leves e não têm dependências externas.
Como lidar com chaves JSON em camelCase em dataclasses Python?
A convenção Python usa snake_case para nomes de variáveis. O conversor traduz chaves camelCase como "firstName" para campos snake_case como first_name. Se precisar desserializar de volta para JSON, use a biblioteca dataclasses-json com uma configuração que mapeia entre as duas convenções de nomenclatura, ou escreva um método __post_init__ personalizado.
Este conversor suporta a sintaxe do Python 3.10+ como list[str] em vez de List[str]?
O conversor gera imports do módulo typing (List, Optional) para máxima compatibilidade com Python 3.7 a 3.12. Se o seu projeto usa Python 3.10 ou posterior, você pode substituir List[str] por list[str] e Optional[str] por str | None com segurança. A tabela de mapeamento de tipos acima mostra ambas as formas.