100 % local — seus dados nunca saem do seu navegador

JSON para Python — Pydantic, dataclass ou TypedDict

Transforme uma amostra JSON em classes Python. Escolha o estilo que o seu projeto já usa e cole o resultado como está no models.py, sem retoques.

Instantâneo Privado Zero cookies
Estilo

Entrada JSON

Saída Python

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

estiloo que ele dáo que custa
Pydanticvalidação na fronteira, aliases para as chaves renomeadasuma dependência e objetos que não são simples
dataclassum contêiner simples, só biblioteca padrãonenhuma validação e nenhum alias para chave renomeada
TypedDictanotações para os dicionários que você já temnada 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.

Perguntas frequentes

Qual dos três estilos escolher?
Pydantic se o dado vem de fora e você quer validá-lo na fronteira. `dataclass` se ele já é confiável e um contêiner simples basta. `TypedDict` se você está anotando dicionários que já tem, sem mexer no código de execução. A estrutura inferida é a mesma; só muda o que ela custa.
Por que minha chave foi renomeada, e para onde ela foi?
Os atributos do Python vão em snake_case: `firstName` vira `first_name`. No estilo Pydantic a chave original fica guardada por `Field(alias="firstName")`, e a análise continua funcionando. O `dataclass` não tem alias a oferecer — só o nome é mantido — e o `TypedDict` conserva a chave bruta, passando à sua sintaxe funcional quando uma chave não é um nome usável.
O que acontece com uma chave chamada `class` ou `def`?
Ela ganha um sublinhado: `class_`, `def_`, com `Field(alias="class")` no Pydantic. Emitir `class: int` produzia um arquivo que o Python nem analisa — era um defeito real, encontrado ao escrever esta página e corrigido. O `TypedDict` contorna a questão escrevendo `TypedDict('Root', {"class": int})`.

Conversores relacionados