Skip to main content
CheckTown
Conversores

Como converter JSON para classes modelo Dart

Publicado 5 min de leitura
Neste artigo

Por que desenvolvedores Dart/Flutter precisam de geração de classes JSON

Aplicações Flutter dependem fortemente de JSON para comunicação com APIs, mas Dart não possui mapeamento JSON-para-objeto integrado como Gson ou Jackson em outras linguagens. Cada resposta de API requer uma classe modelo com métodos factory fromJson e toJson manuais. Para apps que consomem múltiplos endpoints, esse boilerplate se multiplica rapidamente — nosso conversor gera classes modelo Dart completas a partir de amostras JSON instantaneamente, economizando horas de codificação repetitiva.

Desde que o Dart 2.12 introduziu sound null safety, cada campo nas suas classes modelo deve ser explicitamente tipado como nullable ou non-nullable. O conversor analisa seus dados JSON para determinar a nullability correta de cada campo, produzindo modelos que funcionam corretamente com o sistema de null safety do Dart desde o início.

O padrão fromJson/toJson

O conversor gera classes Dart seguindo o padrão de construtor factory usado em todo o ecossistema Flutter.

  • factory fromJson — gera um construtor factory que recebe um Map<String, dynamic> e inicializa todos os campos com casting de tipo apropriado, verificações null e parsing de objetos aninhados
  • Método toJson — cria um método toJson() que retorna um Map<String, dynamic> para serialização, tratando objetos aninhados chamando recursivamente seus métodos toJson()
  • Geração de modelos aninhados — quando o JSON contém objetos aninhados, o conversor cria classes Dart separadas para cada estrutura aninhada com seus próprios métodos fromJson/toJson, corretamente vinculados a partir da classe pai

Experimente gratuitamente — sem cadastro

Converter JSON para Dart →

Null safety e integração json_serializable

O conversor gera código Dart null-safe compatível com práticas modernas de desenvolvimento Flutter.

  • Sound null safety — campos com valores null na amostra JSON são tipados como nullable (String?), enquanto valores presentes usam tipos non-nullable (String), com verificações null apropriadas nos construtores fromJson
  • Compatibilidade json_serializable — a estrutura de classe gerada é compatível com o pacote json_serializable, permitindo adicionar anotações @JsonSerializable() e @JsonKey para geração de código com build_runner
  • Tratamento de listas — arrays de objetos geram tipos List<ChildModel> com mapeamento apropriado em fromJson usando .map() e .toList(), tratando cenários de listas tanto nullable quanto non-nullable

Perguntas frequentes

Devo usar o pacote freezed em vez disso?

O pacote freezed adiciona imutabilidade, tipos union e suporte a pattern matching às classes Dart, mas requer configuração do build_runner e adiciona complexidade de compilação. Nosso conversor gera classes Dart simples que funcionam sem dependências de geração de código. Você pode migrar a saída para freezed depois adicionando anotações — os nomes dos campos e tipos permanecem os mesmos.

Como o conversor lida com modelos JSON aninhados?

Cada objeto JSON aninhado se torna uma classe Dart separada com seu próprio factory fromJson e método toJson. A classe pai referencia a classe filha em sua declaração de tipo e chama ChildModel.fromJson() em seu construtor factory. Estruturas profundamente aninhadas são totalmente suportadas com hierarquias de tipos apropriadas.

Como os campos List são tratados no código gerado?

Listas de primitivos geram listas tipadas simples (List<String>, List<int>). Listas de objetos geram List<ChildModel> com mapeamento fromJson: (json['items'] as List).map((e) => ChildModel.fromJson(e)).toList(). Listas nullable incluem verificações null, e arrays vazios geram defaults de lista vazia corretamente tipados.

Ferramentas relacionadas