Gson, convertire oggetti Java in JSON in Android

Serializzare e deserializzare facilmente oggetti Java da/a oggetti JSON in Android

Gson è una libreria Java che consente di convertire in maniera semplice e veloce oggetti Java nella loro rappresentazione JSON, e viceversa, nello sviluppo di un’applicazione Android. Realizzata da Google, Gson rappresenta una soluzione semplice e flessibile da utilizzare, consentendo di:

  1. Convertire oggetti preesistenti non modificabili in JSON e viceversa;
  2. Sfruttare i Java Generics;
  3. Utilizzare una rappresentazione personalizzata degli oggetti;
  4. Utilizzare oggetti arbitrariamente complessi con gerarchie e tipi generici;
  5. Lavorare con oggetti di cui non si conosce il codice sorgente.

Per convertire un oggetto Java in un oggetto JSON si utilizza il metodo Json(), al contrario per convertire una stringa in JSON nel suo equivalente oggetto Java si utilizza il metodo fromJson().

Per convertire un oggetto Java in JSON bisogna creare un nuovo oggetto Gson e utilizzare il suo metodo toJson():

  Gson gson = new Gson();
  Person p1 = new Person("Andrea", "Minelli", 25);
  System.out.println(gson.toJson(p1));

Avremo come risultato:

{
    "name": "Andrea",
    "surname": "Minelli",
    "age": 25
}

Anche Retrofit, una libreria Android, utilizza il formato Gson per convertire i body HTTP nel formato JSON e viceversa.

Convertire gli oggetti JSON in oggetti Java con dei tool online

Esistono molti tool online che consentono di convertire oggetti Java in oggetti Gson, uno di questi è jsonschema2pojo. Facciamo un esempio, utilizzando l’oggetto JSON:

{
    "name": "Andrea",
    "surname": "Minelli",
    "age": 25,
    "petList": {
        "animal": {
            "name": "Fido",
            "type": "Cane"
        }
    }
}

Impostando:

  1. La voce Package con il nome del package della classe: it.datrevo;
  2. La voce Class name con il nome della classe: Person;
  3. Selezionando in Source type la voce JSON;
  4. Selezionando come Annotation style la voce Gson.

Cliccando su Preview o Zip ci verrà generata la classe Java corrispondente al JSON passato in ingresso:

package it.datrevo;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Animal {

@SerializedName("name")
@Expose
private String name;
@SerializedName("type")
@Expose
private String type;

/**
*
* @return
* The name
*/
public String getName() {
return name;
}

/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
*
* @return
* The type
*/
public String getType() {
return type;
}

/**
*
* @param type
* The type
*/
public void setType(String type) {
this.type = type;
}

}
-----------------------------------it.datrevo.Person.java-----------------------------------

package it.datrevo;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Person {

@SerializedName("name")
@Expose
private String name;
@SerializedName("surname")
@Expose
private String surname;
@SerializedName("age")
@Expose
private Integer age;
@SerializedName("petList")
@Expose
private PetList petList;

/**
*
* @return
* The name
*/
public String getName() {
return name;
}

/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
*
* @return
* The surname
*/
public String getSurname() {
return surname;
}

/**
*
* @param surname
* The surname
*/
public void setSurname(String surname) {
this.surname = surname;
}

/**
*
* @return
* The age
*/
public Integer getAge() {
return age;
}

/**
*
* @param age
* The age
*/
public void setAge(Integer age) {
this.age = age;
}

/**
*
* @return
* The petList
*/
public PetList getPetList() {
return petList;
}

/**
*
* @param petList
* The petList
*/
public void setPetList(PetList petList) {
this.petList = petList;
}

}
-----------------------------------it.datrevo.PetList.java-----------------------------------

package it.datrevo;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class PetList {

@SerializedName("animal")
@Expose
private Animal animal;

/**
*
* @return
* The animal
*/
public Animal getAnimal() {
return animal;
}

/**
*
* @param animal
* The animal
*/
public void setAnimal(Animal animal) {
this.animal = animal;
}

}

Per approfondire Android ecco la guida completa completa: Guida Android.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *