In questo articolo
Perché gli sviluppatori Dart/Flutter hanno bisogno della generazione di classi JSON
Le applicazioni Flutter dipendono fortemente dal JSON per la comunicazione API, ma Dart non ha il mapping JSON-a-oggetto integrato come Gson o Jackson in altri linguaggi. Ogni risposta API richiede una classe modello con metodi factory fromJson e toJson manuali. Per app che consumano più endpoint, questo boilerplate si moltiplica rapidamente — il nostro convertitore genera classi modello Dart complete da campioni JSON istantaneamente, risparmiando ore di codice ripetitivo.
Da quando Dart 2.12 ha introdotto la sound null safety, ogni campo nelle tue classi modello deve essere esplicitamente tipizzato come nullable o non-nullable. Il convertitore analizza i tuoi dati JSON per determinare la corretta nullabilità di ogni campo, producendo modelli che funzionano correttamente con il sistema di null safety di Dart fin dall'inizio.
Il pattern fromJson/toJson
Il convertitore genera classi Dart seguendo il pattern standard del costruttore factory usato nell'ecosistema Flutter.
- factory fromJson — genera un costruttore factory che prende un Map<String, dynamic> e inizializza tutti i campi con il casting di tipo appropriato, controlli null e parsing di oggetti annidati
- Metodo toJson — crea un metodo toJson() che restituisce un Map<String, dynamic> per la serializzazione, gestendo gli oggetti annidati chiamando ricorsivamente i loro metodi toJson()
- Generazione modelli annidati — quando il JSON contiene oggetti annidati, il convertitore crea classi Dart separate per ogni struttura annidata con i propri metodi fromJson/toJson, correttamente collegati dalla classe genitore
Prova gratuitamente — nessuna registrazione richiesta
Converti JSON in Dart →Null safety e integrazione json_serializable
Il convertitore genera codice Dart null-safe compatibile con le pratiche moderne di sviluppo Flutter.
- Sound null safety — i campi con valori null nel campione JSON sono tipizzati come nullable (String?), mentre i valori presenti usano tipi non-nullable (String), con controlli null appropriati nei costruttori fromJson
- Compatibilità json_serializable — la struttura di classe generata è compatibile con il pacchetto json_serializable, permettendoti di aggiungere annotazioni @JsonSerializable() e @JsonKey per la generazione di codice con build_runner
- Gestione delle liste — gli array di oggetti generano tipi List<ChildModel> con mapping appropriato in fromJson usando .map() e .toList(), gestendo scenari di liste sia nullable che non-nullable
Domande frequenti
Dovrei usare il pacchetto freezed invece?
Il pacchetto freezed aggiunge immutabilità, tipi union e supporto per il pattern matching alle classi Dart, ma richiede la configurazione di build_runner e aggiunge complessità in fase di compilazione. Il nostro convertitore genera classi Dart semplici che funzionano senza dipendenze di generazione di codice. Puoi migrare l'output a freezed in seguito aggiungendo annotazioni — i nomi dei campi e i tipi rimangono gli stessi.
Come gestisce il convertitore i modelli JSON annidati?
Ogni oggetto JSON annidato diventa una classe Dart separata con il proprio factory fromJson e metodo toJson. La classe genitore referenzia la classe figlia nella sua dichiarazione di tipo e chiama ChildModel.fromJson() nel suo costruttore factory. Le strutture profondamente annidate sono completamente supportate con gerarchie di tipi appropriate.
Come vengono gestiti i campi List nel codice generato?
Le liste di primitivi generano liste tipizzate semplici (List<String>, List<int>). Le liste di oggetti generano List<ChildModel> con mapping fromJson: (json['items'] as List).map((e) => ChildModel.fromJson(e)).toList(). Le liste nullable includono controlli null, e gli array vuoti generano default di lista vuota correttamente tipizzati.