Convertitore da JSON a Dart

Passaggio 1 / 333%

Genera classi modello Dart senza dipendenze a partire da un oggetto JSON o da un array di oggetti di esempio. Il convertitore unisce tutti gli elementi esaminati, crea classi annidate, conserva le chiavi JSON originali e deduce tipi di campo null-safe con un costruttore factory fromJson. Può anche aggiungere metodi toJson per ottenere un output compatibile con jsonEncode. Il campione e il codice generato restano nel browser e non vengono mai caricati né inseriti nell’URL.

Come funziona

  1. 1

    Incolla un campione rappresentativo

    Usa un oggetto JSON o un array di oggetti. Più elementi aiutano a rilevare campi mancanti, nullable o con tipi diversi.

  2. 2

    Scegli le opzioni Dart

    Assegna un nome alla classe radice, decidi se tutti i campi devono essere nullable e abilita i metodi toJson se ti servono.

  3. 3

    Controlla ed esporta

    Verifica le classi dedotte, poi copia il codice o scarica localmente un file models.dart.

Come JSON diventa un modello Dart null-safe

La documentazione ufficiale di dart:convert spiega che jsonDecode() produce valori compatibili con JSON, come numeri, stringhe, booleani, null, liste e mappe con chiavi stringa. Una classe modello non è direttamente codificabile in JSON, ma jsonEncode() può chiamarne il metodo toJson(). Questo convertitore genera tale schema di serializzazione manuale senza aggiungere annotazioni json_serializable o dipendenze da pacchetti.

Supponiamo che un esempio contenga un utente con un indirizzo annidato. La classe User generata dispone di campi final e di un costruttore con parametri denominati. User.fromJson(Map<String, Object?> json) converte i valori scalari e chiama UserAddress.fromJson() per l’oggetto annidato. Se address manca o vale null in uno degli oggetti esaminati, il suo tipo diventa UserAddress? e la factory verifica il valore prima di crearlo. Quando toJson è attivo, i modelli annidati vengono convertiti ricorsivamente in mappe accettate da jsonEncode().

Valore osservato in JSON Tipo Dart generato
Numero intero int
Numero decimale double
Campioni interi e decimali num
Testo String
Booleano bool
Oggetto annidato Classe modello generata
Array omogeneo List<T>
Array annidato vuoto o incompatibile List<Object?>
Solo null o valori in conflitto Object?

Il convertitore esamina ogni oggetto di un array radice invece di fidarsi solo del primo elemento. Un campo diventa nullable se manca in uno degli oggetti o è esplicitamente null. Puoi inoltre rendere nullable tutti i campi quando l’API reale è meno prevedibile del campione. La guida Dart alla null safety ricorda che, per impostazione predefinita, i tipi non sono nullable e richiedono ? per accettare null.

Gestione degli identificatori e limiti dell’inferenza

Le chiavi JSON non devono necessariamente essere membri Dart validi. La punteggiatura viene rimossa, le parole sono trasformate in lowerCamelCase, le parole riservate ricevono un suffisso sicuro e le collisioni suffissi numerici deterministici. La chiave originale rimane invariata in json['original-key'] e nella mappa di toJson(). I nomi delle classi annidate includono il percorso completo, così oggetti indirizzo non correlati non vengono uniti per errore.

Un singolo campione non dimostra il contratto di un’API. Le stringhe JSON non sono automaticamente date, UUID o enum, mentre un array vuoto non offre alcun tipo di elemento. Anche i nomi di membro duplicati non garantiscono una conversione bidirezionale fedele, perché i parser JSON conservano spesso solo l’ultimo valore. Prima dell’uso in produzione, confronta i modelli generati con la documentazione o lo schema dell’API. I limiti su input, profondità, dichiarazioni dedotte e output mantengono sotto controllo il lavoro del browser.

Domande frequenti

No. Analisi, inferenza, generazione del codice, copia e download avvengono nel browser. Il JSON e il codice Dart non passano tramite i nostri server e non vengono inseriti nell’URL.

Sì. Flutter usa Dart, quindi queste classi senza dipendenze possono essere incluse in un progetto Flutter. Confronta prima i tipi dedotti con il contratto effettivo dell’API.

No. Il risultato contiene metodi fromJson manuali e metodi toJson facoltativi, senza dipendenze da pacchetti o da build_runner.

Un campo osservato come null o assente diventa nullable. Se il campione non è rappresentativo, puoi rendere nullable tutti i campi generati.

No. Il risultato riflette solo i valori osservati. Usa più oggetti di esempio e confrontalo con lo schema o la documentazione del fornitore.

Strumenti correlati

Strumento disponibile in altre lingue