1. JSON e Python: Conversao de Tipos
O JSON (JavaScript Object Notation) e o formato de troca de dados mais usado em APIs modernas. Python possui suporte nativo via modulo json, mas a conversao entre os tipos dos dois sistemas requer atencao.
Mapeamento JSON → Python: object vira dict, array vira list, string vira str, number vira int ou float, true/false viram True/False, null vira None.
2. Dict Simples
O dicionario Python e a representacao mais direta de um objeto JSON. E flexivel, nao tem schema definido e e facilmente serializavel de volta para JSON. Ideal para scripts rapidos, prototipagem e casos onde a estrutura pode variar.
"Para a maioria dos casos de uso com APIs externas, um dict simples com acesso por chave e suficiente e mais facil de manter."
3. TypedDict
Introduzido no Python 3.8 (PEP 589), o TypedDict permite definir dicionarios com tipos especificos para cada chave, habilitando verificacao estatica com mypy ou pyright sem alterar o comportamento em runtime.
Vantagens: autocompletar no IDE, deteccao de erros de tipo em tempo de desenvolvimento, documentacao implicita da estrutura esperada. Desvantagens: nao valida em runtime, requer Python 3.8+.
4. dataclass
O decorator @dataclass (Python 3.7+, PEP 557) gera automaticamente metodos __init__, __repr__ e __eq__. Oferece acesso por atributo (obj.nome) em vez de chave (obj['nome']), tipagem forte e melhor legibilidade em codigo orientado a objetos.
Para conversao de e para JSON com dataclass, use dataclasses.asdict() e dataclasses.fields().
5. Quando Usar Cada Um
- Dict: scripts, prototipagem, estruturas dinamicas ou quando a compatibilidade maxima e necessaria.
- TypedDict: codebases com tipagem estatica (mypy), quando voce quer manter a API de dict mas com tipos documentados.
- dataclass: quando os dados representam entidades do dominio, quando voce quer acesso por atributo, ou em projetos maiores com OOP.
6. Perguntas Frequentes
Como converter de volta para JSON?
Para dict: json.dumps(meu_dict). Para dataclass: json.dumps(dataclasses.asdict(meu_obj)). Para TypedDict: como e um dict em runtime, use json.dumps(meu_typed_dict) normalmente.
O conversor suporta JSON aninhado?
Sim. Objetos e arrays aninhados sao convertidos recursivamente. Porem, para TypedDict e dataclass, apenas o nivel raiz ganha uma classe tipada — objetos aninhados sao representados como dict no tipo.
Existe alternativa mais robusta para models complexos?
Sim. Bibliotecas como Pydantic (validacao em runtime com tipagem) e attrs oferecem funcionalidades mais avancadas para modelos de dados complexos em Python.