Conversor de JSON para Dart
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
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
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
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
Referência da Tabela ASCII
Tabela ASCII completa de 0 a 127 com valores decimais, hexadecimais, octais e binários e notação de referência numérica HTML, incluindo NUL, LF e DEL.
Referência de Caracteres HTML
Lista pesquisável de entidades HTML, seus códigos nomeados e numéricos, e uma cópia com um clique para caracteres e símbolos especiais.
Referência de atalhos de teclado
Pesquise atalhos padrão documentados do VS Code, Chrome e Bash com GNU Readline no macOS, Windows e Linux.
Gerador de EditorConfig
Gere um arquivo .editorconfig com suas regras de estilo e tamanho de indentação, fim de linha, charset e espaços em branco para formatação consistente entre IDEs e editores.
Validador de Email
Valide um endereço de email: verificação de sintaxe RFC 5322, consulta de registro MX em tempo real, além de detalhes de parte local, domínio e comprimento. Nenhum email é enviado.
Conversor de Tamanho de Arquivo
Converta entre bytes, KB, MB, GB, TB e as unidades binárias IEC (KiB, MiB, GiB, TiB), combinando decimal e binário como preferir.
Ferramenta disponível em outros idiomas
- Konverter JSON ke Dart [ID]
- Konwerter JSON na Dart [PL]
- ตัวแปลง JSON เป็น Dart [TH]
- Trình chuyển JSON sang Dart [VI]
- JSON-in-Dart-Konverter [DE]
- Conversor de JSON a Dart [ES]
- محول JSON إلى Dart [AR]
- JSONからDartへの変換ツール [JA]
- Convertisseur JSON vers Dart [FR]
- JSON to Dart 변환기 [KO]
- JSON till Dart-konverterare [SV]
- JSON-naar-Dart-converter [NL]
- JSON to Dart Converter [EN]
- Convertitore da JSON a Dart [IT]
- Конвертер JSON в Dart [RU]
- JSON'dan Dart'a Dönüştürücü [TR]
- JSON 转 Dart 工具 [ZH]