Dopo aver pubblicato oltre 50 post sul blog di retrofit, abbiamo raccolto abbastanza feedback che molti sviluppatori vorrebbero un’ampia introduzione a Gson di Google. Gson è una libreria molto potente per mappare le strutture dati rappresentate come JSON agli oggetti Java. Naturalmente, supporta anche il contrario e può creare una rappresentazione JSON appropriata dei tuoi oggetti Java.
Se sei interessato a dove sta andando questa serie, controlla il nostro schema della serie:
Panoramica della serie Gson
Dipendenza Gson
Questa guida sarà hands-on e iniziare con un po ‘ di serializzazione in un minuto. Dal momento che molti dei nostri lettori sono sviluppatori Android, lo personalizzeremo per te, ma Gson può essere utilizzato in qualsiasi ambiente Java. Prima di poter iniziare, dobbiamo inserire la libreria Gson nel nostro progetto. Al momento della scrittura, l’ultima versione è 2.8.5
. Se stai usando Gradle, aggiungi la seguente riga:
implementation 'com.google.code.gson:gson:2.8.5'
Se stai usando Maven, puoi aggiungere la seguente dipendenza:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
Per i ragazzi poveri che non utilizzano né il sistema di gestione delle dipendenze, è possibile scaricare il jar sul repository GitHub ufficiale.
Nozioni di base sulla serializzazione Java-JSON
Quindi facciamo un po ‘ di serializzazione! Serializzazione nel contesto di Gson significa mappare un oggetto Java alla sua rappresentazione JSON. Nei prossimi tutorial i nostri dati diventeranno più complessi, ma per ora inizieremo con un oggetto UserSimple
molto semplice:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
L’oggetto utente ha quattro proprietà:
- L’utente
name
è un oggetto String - L’utente
email
è anche un oggetto String - L’utente
age
è un numero intero, il che significa che l’età è memorizzata in anni (ad esempio26
e non il compleanno esatto!) - Finalmente una bandiera booleana
isDeveloper
La nostra applicazione Android o Java deve convertire un oggetto UserSimple
nella sua rappresentazione JSON. Supponendo che manteniamo gli stessi nomi dei membri, ci aspetteremmo un tale JSON per Norman, l’autore di questo post sul blog:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
Quindi vediamo come possiamo fare la conversione con Gson. Prima di tutto, dobbiamo creare un oggetto Java per Norman:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
Per fare la serializzazione, abbiamo bisogno di un oggetto Gson
, che gestisca la conversione. Possiamo semplicemente usare il costruttore:
Gson gson = new Gson();
Successivamente, dobbiamo chiamare la funzione toJson()
e passare l’oggetto UserSimple
:
String userJson = gson.toJson(userObject);
L’oggetto userJson
contiene il seguente valore:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gson ha cambiato l’ordine delle proprietà (in ordine alfabetico), ma il contenuto è identico! Nota come Gson ha rispettato i tipi. I valori di stringa erano racchiusi in ""
, mentre i valori interi non avevano alcun wrapping. Non abbiamo dovuto scherzare con JSON
oggetti o copiare singoli membri. Una singola chiamata a Gson è stata sufficiente per mappare l’intero oggetto. Questo è estremamente utile quando lavoriamo con strutture dati complesse. Ma prima di andare troppo in profondità, proviamo l’altra direzione. Gson può creare un oggetto Java dal JSON sopra?
Nozioni di base di JSON-Java Deserializzazione
Prima di tutto, abbiamo bisogno di creare una stringa, che contiene il suddetto JSON:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
Abbiamo cambiato "
in '
per evitare tonnellate di \"
in fuga. Tuttavia, funziona in entrambi i casi. Il prossimo passo è, come probabilmente avrai intuito, creare un’istanza Gson:
Gson gson = new Gson();
Infine, dobbiamo mappare da un JSON a un oggetto Java con fromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
Nota come dobbiamo passare l’oggetto Java previsto come secondo parametro. Altrimenti Gson non sa a cosa dovrebbe mappare il JSON. Non è un mago!
Se alleghiamo un debugger e controlliamo il risultato userObject
ci mostrerà che Gson ha mappato correttamente tutte le proprietà:
In questo post introduttivo hai visto l’utilizzo di base di Gson. Abbiamo dimostrato quanto sia facile mappare da e verso i dati JSON. Siamo sicuri che hai un sacco di domande al momento:
- Le classi del modello Java hanno bisogno di un costruttore / getter / setter?
- I campi del modello Java possono essere privati?
- Come vengono gestiti i valori null?
- Cosa succede se la classe Java ha nomi di membri diversi rispetto a JSON?
- Come (de)serializzare array/elenchi di oggetti
- Come (de)serializzare oggetti nidificati
- Gson mantiene un valore predefinito definito per una proprietà di classe durante l’esecuzione di
.fromJson()
e non c’è alcun valore per quella proprietà disponibile in JSON?
Nessun problema, arriveremo a tutti loro nelle prossime settimane. Se hai in mente un argomento specifico, faccelo sapere nei commenti o su Twitter @ futurestud_io.
Rendere rock & godere di codifica!
Non sei ancora un esperto? Prendi il nostro libro Gson!
Mappare JSON agli oggetti Java (e viceversa) è degli anni ‘ 90. Gson è la soluzione moderna per mappare automaticamente tra Java e JSON con il minimo sforzo.
Hai solo bisogno di sapere come! Scopri ogni dettaglio sulle funzionalità di Gson, configurazione & personalizzazione nel nostro libro.
Il nostro libro contiene tutto quello che c’è da sapere su Gson. Valuta il tuo tempo e salva te stesso da infinite ore di ricerche su Google per risolvere rapidamente i tuoi problemi. Investi nella tua conoscenza in anticipo e in una soluzione pulita. Ti renderemo l’esperto Gson della tua squadra.
Include una cartella di lavoro!