Conversor de JSON para Dart

Etapa 1 / 333%

Gere classes de modelo Dart sem dependências usando um objeto JSON ou uma lista de objetos de exemplo. O conversor combina todos os itens analisados, cria classes aninhadas, preserva as chaves JSON originais e infere tipos de campo com null safety, além de um construtor factory fromJson. Se precisar de uma saída compatível com jsonEncode, inclua métodos toJson. A amostra e o código gerado permanecem neste navegador e nunca são enviados ou colocados na URL.

Como funciona

  1. 1

    Cole uma amostra representativa

    Use um objeto JSON ou uma lista de objetos. Vários itens ajudam a identificar campos ausentes, nullable e com tipos diferentes.

  2. 2

    Escolha as opções do Dart

    Defina o nome da classe raiz, decida se todos os campos devem ser nullable e ative os métodos toJson se necessário.

  3. 3

    Revise e exporte

    Confira as classes inferidas e copie o código ou baixe um arquivo models.dart local.

Como o JSON se transforma em modelos Dart com null safety

A documentação oficial do dart:convert explica que jsonDecode() produz valores compatíveis com JSON, como números, strings, booleanos, null, listas e mapas com chaves de texto. Uma classe de modelo não pode ser codificada diretamente em JSON, mas jsonEncode() pode chamar o método toJson() dela. Este conversor gera esse padrão de serialização manual sem adicionar anotações json_serializable nem dependências de pacotes.

Imagine uma amostra com um usuário e um endereço aninhado. A classe User gerada tem campos final e um construtor com parâmetros nomeados. User.fromJson(Map<String, Object?> json) converte valores escalares e chama UserAddress.fromJson() para o objeto aninhado. Se address estiver ausente ou for null em qualquer objeto analisado, seu tipo passa a ser UserAddress?, e a factory verifica o valor antes de criar a instância. Quando toJson está ativado, os modelos aninhados são convertidos recursivamente em mapas aceitos por jsonEncode().

Valor observado no JSON Tipo Dart gerado
Número inteiro int
Número decimal double
Amostras inteiras e decimais num
Texto String
Booleano bool
Objeto aninhado Classe de modelo gerada
Lista homogênea List<T>
Lista aninhada vazia ou incompatível List<Object?>
Apenas null ou valores conflitantes Object?

O conversor examina todos os objetos de uma lista raiz, em vez de confiar apenas no primeiro item. Um campo se torna nullable quando está ausente em algum objeto ou aparece explicitamente como null. Você também pode tornar todos os campos nullable quando a API real for menos previsível do que a amostra. O guia de null safety do Dart ressalta que os tipos não aceitam null por padrão e precisam de ? para isso.

Tratamento de identificadores e limites da inferência

As chaves JSON não precisam ser membros Dart válidos. A pontuação é removida, as palavras são convertidas para lowerCamelCase, palavras reservadas recebem um sufixo seguro e colisões recebem sufixos numéricos determinísticos. A chave original permanece inalterada em json['original-key'] e no mapa de toJson(). Os nomes das classes aninhadas usam o caminho completo para que objetos de endereço independentes não sejam combinados por engano.

Uma única amostra não comprova o contrato de uma API. Strings JSON não são automaticamente datas, UUIDs ou enums, e uma lista vazia não revela o tipo dos elementos. Nomes de membros duplicados também não permitem uma conversão de ida e volta confiável, pois os analisadores JSON costumam preservar apenas o último valor. Antes de usar os modelos em produção, compare-os com a documentação ou o esquema da API. Limites de entrada, profundidade, declarações inferidas e saída mantêm o trabalho do navegador sob controle.

Perguntas frequentes

Não. A análise, a inferência, a geração do código, a cópia e o download acontecem no navegador. O JSON e o código Dart não passam pelos nossos servidores nem são colocados na URL.

Sim. O Flutter usa Dart, portanto essas classes sem dependências podem ser usadas em um projeto Flutter. Primeiro, compare os tipos inferidos com o contrato real da API.

Não. Ele gera métodos fromJson manuais e métodos toJson opcionais, sem depender de nenhum pacote ou do build_runner.

Um campo observado como null ou ausente se torna nullable. Se a amostra não for representativa, você pode tornar todos os campos gerados nullable.

Não. O resultado reflete somente os valores observados. Use vários objetos de exemplo e compare o resultado com o esquema ou a documentação do fornecedor.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas