Vai al contenuto
100% locale

JSON a classe Dart

Converti un campione JSON in una classe Dart con fromJson, toJson e modelli annidati.

Ingresso
Uscita

JSON a classe Dart

Incolla un campione JSON e questo strumento deduce la forma dei dati e genera una classe Dart corrispondente, del tipo che altrimenti scriveresti manualmente per un modello Flutter. Gli oggetti annidati diventano le loro classi, gli array diventano campi `List<...>` tipizzati, e ogni classe include un costruttore denominato, una factory `fromJson` e un metodo `toJson`, così il risultato si inserisce direttamente in un progetto Flutter o Dart.

Le opzioni controllano lo stile del codice generato. "Nome della classe" imposta la classe radice; le classi annidate sono denominate in base alla chiave JSON che le ha introdotte. "Null safety con campi obbligatori" contrassegna i campi presenti in ogni campione come `required` con un tipo non nullable, e i campi talvolta mancanti o null come nullable e opzionali; disattivalo per rendere ogni campo nullable. "Annotazioni json_serializable" passa da corpi `fromJson`/`toJson` scritti a mano ad annotazioni `@JsonSerializable()` e `@JsonKey` che delegano a un file `.g.dart` generato, per progetti che già utilizzano quel pacchetto e build_runner. "Campi final" rende la classe immutabile; "Genera copyWith" aggiunge un metodo per creare una copia modificata senza mutare l'originale, e "Genera == e hashCode" aggiunge uguaglianza di valore in modo che due istanze con gli stessi valori di campo siano uguali. "Indentazione" alterna il codice generato tra 2 e 4 spazi.

Quando la stessa forma di oggetto si ripete (un array di elementi che hanno tutti gli stessi campi, ad esempio), lo strumento riutilizza una classe invece di generare un duplicato per ogni occorrenza, e un campo mancante solo da alcune voci in un array viene correttamente dedotto come opzionale anziché obbligatorio. Le chiavi JSON che non sono identificatori Dart validi, utilizzano maiuscole diverse o collidono con una parola chiave o un nome di metodo generato (come `copyWith` o `hashCode`) vengono automaticamente rinominate sul lato Dart mentre la chiave originale viene conservata per la codifica e la decodifica.

Tutto viene eseguito localmente nel tuo browser: nessun campione JSON viene mai caricato da nessuna parte, il che è importante se contiene dati utente reali o la forma di risposta di un'API interna. Copia la classe, scaricala come file .txt o rimanda l'output all'input per convertire un altro pezzo annidato.

FAQ

Come vengono gestiti gli oggetti annidati e gli array?
Ogni oggetto annidato diventa una sua classe Dart denominata in base al campo che l'ha introdotto, e un array di oggetti diventa una List<TuaClasse> tipizzata. Se la stessa forma appare più di una volta, lo strumento riutilizza una sola classe invece di duplicarla per ogni occorrenza.
Cosa cambia davvero con "Null safety con campi obbligatori"?
Quando è attivato, un campo che lo strumento vede in ogni campione ottiene un tipo non nullable e un parametro del costruttore `required`; un campo che talvolta manca o è null ottiene un tipo nullable senza la parola chiave `required`. Disattivarlo rende ogni campo nullable e opzionale, il che è più tollerante per le API le cui risposte variano.
Ho bisogno del pacchetto json_serializable?
Solo se attivi l'opzione "Annotazioni json_serializable", che emette @JsonSerializable()/@JsonKey e una direttiva parte che si aspetta un file .g.dart generato da build_runner. Lasciala disattivata e lo strumento scrive invece metodi fromJson/toJson semplici e senza dipendenze.
Può dedurre correttamente il tipo di un campo numerico?
Sì. Un campo che è sempre un numero intero diventa int; se un valore campione ha un punto decimale, l'intero campo viene ampliato a double in modo che nessun valore sia troncato.
Il mio JSON viene caricato da qualche parte?
No. La classe viene generata interamente nel tuo browser: il tuo campione JSON non lascia mai il tuo dispositivo.