Geração de tipos

JSON para PythonModelos dataclass e Pydantic

Compare os dois registros: uma chave ausente e um null explícito levam a valores padrão diferentes.

JSON para Python

Entrada JSON

A análise e a geração ocorrem neste navegador. A entrada não é enviada nem armazenada.

Código gerado

Opções de geração

Python 3.9+. Metadados dataclass não decodificam nem validam. Pydantic 2.12.5 inclui load_models(source); use essa função para aplicar a política numérica escolhida.

As amostras do array definem o modelo de elemento Root. load_models do Pydantic aceita um objeto ou um array.

2 classes · 2 campos que aceitam null

O conversor JSON para Python transforma respostas representativas de APIs em um rascunho de modelo. Inclua registros com chaves diferentes: um objeto completo sozinho não revela quais campos podem faltar.

Escolha dataclass para contêineres tipados da biblioteca padrão ou Pydantic para interpretar os dados durante o carregamento. As amostras indicam tipos observados; não descrevem todas as regras do seu domínio.

Por que usar JSON para Python?

Ausência não é o mesmo que null

JSON para Python mantém obrigatório um campo presente em todas as amostras mesmo quando aceita null. Se outra amostra omitir a chave, o campo recebe None como padrão. Isso muda os argumentos exigidos pelo construtor.

Dois cartões de objetos mostram um marcador null e um espaço ausente ligados a padrões distintos.

Preserve as chaves após renomear

Palavras reservadas, pontuação e métodos do modelo exigem atributos seguros. A grafia original fica nos metadados dataclass ou aliases Pydantic, com sufixos determinísticos quando dois nomes colidem.

Formas de chaves irregulares seguem caminhos de metadados e aliases validados até atributos seguros.

Defina o contrato de leitura

01

Use registros contrastantes

Aceita um objeto ou array não vazio de objetos. Todos os objetos na mesma posição de um array aninhado contribuem para um modelo de elemento; a comparação encontra chaves ausentes.

02

Confira os padrões antes de importar

O modo padrão adiciona None apenas às chaves ausentes. O modo totalmente opcional permite omitir todos os campos. Datas continuam str até ativar ISO. Decimal afeta tokens decimais ou com expoente e grupos numéricos que os contêm.

03

Exporte um resultado atualizado

A geração espera 350 ms após a edição. Desative o modo automático para usar Gerar ou Ctrl/Cmd+Enter. Qualquer alteração bloqueia a exportação imediatamente. Limpar e Exemplo guardam uma cópia da entrada, opções e código para desfazer uma vez.

Tipos e comportamento gerados

Dois frameworks em um arquivo

JSON para Python gera dataclasses que usam só a biblioteca padrão e colocam campos obrigatórios antes dos campos com padrão. A saída Pydantic tem como alvo 2.12.5. Classes filhas são declaradas antes das classes que as referenciam, permitindo importar o arquivo em Python 3.9.

Uma política explícita para números

Grupos de inteiros puros usam int de precisão arbitrária. Grupos com decimal ou expoente usam float por padrão, inclusive inteiros grandes misturados, que podem ser arredondados. No modo Decimal, esses grupos usam Decimal e o carregador lê decimais sem passar por float, inclusive em contêineres Any.

Inferência conservadora de datas

O modo ISO reconhece datas válidas e timestamps completos com fuso horário e até seis casas de fração de segundo. Todas as strings não nulas da posição devem ter o mesmo tipo de data. Datas inválidas, sem fuso ou com maior precisão continuam str. Pydantic converte as strings reconhecidas; dataclass não.

Nomes seguros com aliases

Os campos viram ASCII snake_case. Palavras reservadas, sublinhados iniciais, nomes model_* e métodos BaseModel são renomeados. Chaves vazias, Unicode e controles preservam aliases. Importações usam aliases privados para evitar colisões com classes chamadas Decimal ou BaseModel.

Compromissos e limites do código

Dataclasses são contêineres
Anotações e metadados json_key não validam entrada, renomeiam chaves, constroem objetos aninhados nem interpretam datas. Crie instâncias explicitamente. Um dict aninhado passado ao construtor continua dict; asdict usa nomes de atributos Python, não os aliases dos metadados.
Use o carregador Pydantic
Instale pydantic==2.12.5 e chame load_models(source). Ele aplica json.loads com a política float/Decimal antes de model_validate e retorna um modelo ou uma lista. Chamar model_validate_json diretamente não mantém a garantia Decimal do carregador. A serialização Decimal normalmente produz strings JSON.
Validação tem fronteiras definidas
Pydantic aceita apenas aliases JSON originais e rejeita propriedades desconhecidas com extra="forbid". Optional[T] permite null; um padrão permite omissão. Campos ausentes recebem None: para distinguir ausência de null, consulte model_fields_set. Os tipos usam coerção normal, não validação estrita de negócio.
Amostras ambíguas mantêm tipos amplos
Tipos conflitantes e campos apenas null usam Any; arrays vazios, List[Any]; objetos aninhados vazios, Dict[str, Any]. Não gera enumerações, UUID, EmailStr, TypedDict, JSON Schema, OpenAPI ou ORM. Rejeita escalares raiz, arrays raiz vazios e arrays raiz com tipos misturados.
Mapeamentos e números podem falhar
Desativar aliases rejeita qualquer chave que precise mudar de nome. Ambos os frameworks rejeitam substitutos Unicode sem par nas chaves. float rejeita overflow e decimais não nulos que sofreriam underflow para zero, mas não promete exatidão decimal. Use Decimal para valores decimais exatos.
Entrada estrita com orçamento
Sem comentários, vírgulas finais, chaves duplicadas, reparo automático, importação de arquivo, busca de URL ou execução Python. Limites: 500.000 caracteres de entrada, 50.000 nós, profundidade 40, 100 campos por objeto combinado, 200 classes, 1.000 caracteres por chave ou número, magnitude de expoente 10.000 e 1.000.000 caracteres de saída.

Dúvidas sobre JSON para Python

Como transformar um objeto dataclass de volta em JSON?

Use dataclasses.asdict para obter dicionários recursivamente e json.dumps para serializar, adaptando valores como date e Decimal. asdict usa atributos Python: reconstruir os aliases originais exige código seu. Metadados não mudam a serialização automaticamente.

O conversor consegue modelar objetos aninhados?

Sim. JSON para Python cria classes auxiliares para objetos aninhados não vazios, antes das classes que dependem delas. Arrays combinam todas as amostras daquela posição. Objetos aninhados vazios usam Dict[str, Any].

Qual opção atende modelos que precisam de validação em execução?

Escolha Pydantic e carregue com load_models. A função constrói modelos aninhados, aplica a política numérica e rejeita propriedades desconhecidas. A coerção de tipos é a padrão do Pydantic, portanto regras de negócio específicas ainda precisam ser acrescentadas.

Como carregar uma dataclass sem instalar outra biblioteca?

É possível escrever o carregamento com a biblioteca padrão, mas o arquivo dataclass gerado não traz esse decodificador. json.loads retorna dicionários e listas; seu código precisa mapear aliases e construir cada instância aninhada.

Como lidar com nomes de campos diferentes das chaves JSON?

Mantenha os aliases ativados. Field(alias=...) lê a chave original no Pydantic; dataclass guarda json_key nos metadados para seu adaptador. Sufixos separam colisões, e a configuração Pydantic não aceita nomes Python como alternativa ao alias.

Encontrou uma inferência que precisa melhorar?

Confira o modelo com registros reais

Use JSON para Python com chaves ausentes, null e números representativos; depois teste o código exportado com o contrato de leitura da sua aplicação.