O que esta ferramenta faz
Uma amostra JSON vira classes Python, uma por objeto.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
from pydantic import BaseModel, Field
class Address(BaseModel):
city: str
class Root(BaseModel):
id: int
first_name: str = Field(alias="firstName")
address: Address
Os filhos são declarados primeiro: uma classe precisa existir antes que outra anote um campo com ela. A saída mira um Python moderno — list[str] e int | str são escritos direto, o que exige 3.10 ou posterior.
Três estilos, três custos diferentes
| estilo | o que ele dá | o que custa |
|---|---|---|
| Pydantic | validação na fronteira, aliases para as chaves renomeadas | uma dependência e objetos que não são simples |
| dataclass | um contêiner simples, só biblioteca padrão | nenhuma validação e nenhum alias para chave renomeada |
| TypedDict | anotações para os dicionários que você já tem | nada em execução — e portanto nenhuma checagem |
A estrutura é idêntica nos três; o que muda é quanto o tipo faz por você.
As palavras reservadas não quebram mais o arquivo
{"class": 1} produzia:
class Root(BaseModel):
class: int
que não é Python — o arquivo nem é analisado. As palavras reservadas agora ganham sublinhado, e o alias do Pydantic guarda a chave:
class_: int = Field(alias="class")
Era um defeito real, encontrado ao escrever esta página e corrigido. O TypedDict resolve de outro jeito: uma chave que não pode ser nome de atributo faz a definição inteira passar à sintaxe funcional, Root = TypedDict('Root', {"class": int}), onde as chaves são strings e tudo cabe.
O que uma amostra não consegue dizer
Nada é | None e nada tem valor padrão: todos os campos são obrigatórios, porque a amostra os trazia. Um null dá o tipo None, que não aceita mais nada — se o campo for «uma string, às vezes nula», o retoque é str | None, e = None se ele puder faltar.
Duas chaves que dão o mesmo snake_case — fooBar e foo_bar — ficam separadas por um sufixo numerado em vez de se fundirem, e o alias registra qual era qual.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.