Skip to content
jsonforge.app

JSON to Python

Gere classes TypedDict Python a partir de uma amostra JSON, para mypy, Pyright e autocompletar no editor.

Entrada JSON

Loading editor…

Código gerado

Digite JSON à esquerda para gerar um tipo a partir dele.

O que é JSON to Python?

Um conversor de JSON para Python transforma um documento JSON de amostra em definições de classes Python tipadas — aqui, classes TypedDict que descrevem a forma exata de um dicionário interpretado por json.loads. O Python entregará sem reclamar um dict comum de qualquer payload JSON, o que é conveniente até o momento em que você precisa saber o que realmente há dentro dele: aí cada acesso de chave é um palpite, erros de digitação só aparecem em tempo de execução e seu editor não pode oferecer autocomplete algum. Declarar a forma como um TypedDict dá a mypy, Pyright e à sua IDE informação suficiente para autocompletar chaves, capturar erros de grafia antes de o código rodar e sinalizar quando um campo é usado com o tipo errado — enquanto o valor continua um dict comum em tempo de execução, então nada muda na forma como você interpreta ou passa os dados.

Como usar JSON to Python

  1. Cole um payload JSON representativo no painel esquerdo — as classes geradas refletem exatamente as chaves presentes naquela amostra.
  2. Defina um nome de classe raiz acima da saída (o padrão é "Root"); cada objeto aninhado se torna sua própria classe, nomeada pela chave que o contém.
  3. Copie as classes para um módulo e anote seu código de parsing, por exemplo `data: Root = json.loads(raw)`.
  4. Use o seletor de linguagem acima da saída para gerar a mesma forma como uma struct Go, struct Rust ou tipo TypeScript.

Exemplos

Objeto plano como TypedDict

Entrada

{"id": 1, "name": "Ada", "active": true}

Saída

from typing import TypedDict class Root(TypedDict): id: int name: str active: bool

Objeto aninhado se torna sua própria classe

Entrada

{"user": {"id": 1, "name": "Ada", "roles": ["admin"]}}

Saída

from typing import TypedDict class User(TypedDict): id: int name: str roles: list[str] class Root(TypedDict): user: User

Erros comuns

  • Assumir que um TypedDict rejeita dados ruins em tempo de execução — ele não rejeita, então uma API que muda de forma continuará entregando um dict errado, sem erro algum, até algo a jusante quebrar.
  • Copiar a sintaxe `list[str]` para um projeto em Python 3.8 ou mais antigo, onde ela levanta um TypeError no import, a menos que `from __future__ import annotations` esteja presente.
  • Gerar a partir de uma amostra em que chaves opcionais por acaso estão ausentes, produzindo uma classe que não marca nada como NotRequired e dá falsa confiança sobre o que o payload sempre contém.

Por que usar esta ferramenta

  • Dá a editores e ao mypy/Pyright autocompletar real de chaves e detecção de erros de digitação sobre dados que de outra forma seriam um dict opaco.
  • Não adiciona overhead nem dependência em tempo de execução — o valor interpretado continua um dict comum, então o código de parsing existente permanece inalterado.
  • Roda inteiramente no cliente, então um payload copiado de um serviço Django ou FastAPI fica local enquanto estes TypedDicts são gerados.

Perguntas frequentes