1001Ferramentas
🐍Conversores

JSON para Python (dataclass)

Converta JSON em uma dataclass Python com type hints. Suporta List, Optional e classes aninhadas. Útil para Pydantic-like usage. Tudo no navegador.

JSON vira dataclass com type hints

Você recebeu um JSON de configuração ou de API e não quer espalhar cfg.get('db').get('host') pelo código todo. Digitar a dataclass equivalente na mão é repetitivo e a chance de esquecer um campo aninhado é grande. Aqui você cola o JSON, dá um nome à classe raiz e sai o código com @dataclass, os imports do typing e as anotações de tipo prontos para colar no módulo.

Cada objeto aninhado vira uma classe própria, batizada com o nome da chave em PascalCase, e ela é escrita antes da classe que a usa. Isso importa mais do que parece: assim o arquivo funciona lendo de cima para baixo, sem anotação em string nem from __future__ import annotations. Em listas, só o primeiro elemento é inspecionado, e a classe do item ganha o sufixo Item, então items vira ItemsItem. O valor null vira Optional[Any].

A entrada precisa ser um objeto no topo. Array ou valor solto devolve o aviso Esperado objeto, então embrulhe a lista numa chave. Os nomes dos campos são copiados literalmente, então chaves como user-name ou class geram Python inválido: renomeie e faça o mapeamento na leitura, ou parta para Pydantic com Field(alias=...). Não há botão de copiar, selecione o texto da caixa e use Ctrl+C. Roda tudo no navegador.

Perguntas frequentes

Ele gera modelo Pydantic?
Não, a saída é dataclass da biblioteca padrão. Para Pydantic, troque o decorador por herança de BaseModel e ajuste os imports; os nomes e tipos dos campos continuam valendo.
E se duas chaves com o mesmo nome tiverem campos diferentes?
A classe é criada uma única vez, a partir da primeira ocorrência. Se as duas tiverem formatos diferentes, a segunda sai errada. Renomeie uma das chaves antes de converter.
Qual versão do Python preciso?
3.7 em diante, que é quando dataclasses entrou na biblioteca padrão. Do 3.9 em diante você pode trocar List[str] por list[str] se preferir a sintaxe nova.

Ferramentas Relacionadas