Modelo simples
- Entrada
- {"id":1,"name":"Ana","score":9.5}
- Saída esperada
- from pydantic import BaseModel class Root(BaseModel): id: int name: str score: float
Tipos básicos como no Python.
json para pydantic model dataclass python
Cole o JSON e escolha Python (Pydantic), dataclass ou TypedDict. Chaves como firstName ganham alias, class vira class_ e opcionais recebem None.
Tipos básicos como no Python.
snake_case no campo e alias com a chave original.
note falta em um documento; phone vem null em outro.
class e from ganham sublinhado, com alias.
Viram datetime e UUID, com os imports.
Obrigatórios primeiro; opcional recebe = None.
Um campo é opcional quando falta em pelo menos um dos objetos observados naquela posição, seja em documentos diferentes ou em itens diferentes de um mesmo array. Se todos os objetos de um array de 50 itens têm a chave phone, ela é obrigatória; se um não tem, vira phone?: string. Já um valor null não torna o campo opcional: ele o torna anulável (string | null). Os dois conceitos são distintos na API e nas linguagens, por isso a ferramenta os separa. A opção Todos os campos opcionais marca cada campo como opcional, útil para PATCH e para respostas parciais.
Pydantic quando o dado vem de fora e precisa de validação e conversão. Dataclass para objetos simples (e imutáveis, com frozen=True) sem dependência extra. TypedDict quando você continua trabalhando com dict, por exemplo ao anotar o retorno de json.loads.
No Pydantic, a ferramenta converte para snake_case e grava o alias original. No dataclass e no TypedDict as chaves ficam como estão, para que Root(**dados) e o dict continuem funcionando.
Com a opção de tipos nativos ligada, textos de data e hora, data e UUID viram datetime, date e UUID no Pydantic, e o Pydantic faz a conversão ao validar. Nas demais variantes continuam str.
Para a sintaxe str | None, sim: Python 3.10 ou superior (list[str] já funciona desde a 3.9). Em versões anteriores, troque por Optional[str] e List[str] do módulo typing.
export type Root = RootItem[];
export interface RootItem {
id: number;
number: string;
status: string;
createdAt: string;
total: number;
customer: Customer;
items: Item[];
tags: string[];
shipping: Shipping;
billing?: Shipping;
couponCode?: string;
}
export interface Customer {
id: string;
name: string;
email: string;
phone: string | null;
}
export interface Item {
sku: string;
name: string;
qty: number;
price: number;
}
export interface Shipping {
street: string;
city: string;
zip: string;
}
Texto com poucos valores repetidos, em pelo menos 8 amostras, vira enum.
Data e hora, data, UUID, e-mail, URL e IPv4.
Objetos com os mesmos campos viram um tipo só.
Chaves que parecem ids ou datas viram mapa, e objeto vazio vira mapa de valores desconhecidos.
Array de tamanho fixo com tipos diferentes por posição, como ["a", 1].
Evita int quando as amostras só trazem inteiros por acaso.
Recusa vírgula sobrando, comentários, aspas simples e afins.
Da linguagem: camelCase, snake_case ou PascalCase, com anotação da chave original. Dataclass e TypedDict sempre mantêm as chaves.
Go, C#, Java, Swift e Pydantic. Nas outras linguagens o campo continua texto.
readonly em TypeScript, frozen em Python, init em classes C# e let em Swift.
O JSON é processado no seu navegador. Nada do que você cola ou abre é enviado a servidores.