Android Parsing JSON con Gson


Esempio

L'esempio mostra l'analisi di un oggetto JSON utilizzando la libreria Gson di Google .

Parsing objects:

class Robot {
    //OPTIONAL - this annotation allows for the key to be different from the field name, and can be omitted if key and field name are same . Also this is good coding practice as it decouple your variable names with server keys name 
    @SerializedName("version") 
    private String version;

    @SerializedName("age")
    private int age;
    
    @SerializedName("robotName")
    private String name;
    
    // optional : Benefit it allows to set default values and retain them, even if key is missing from Json response. Not required for primitive data types. 

    public Robot{
       version = "";
       name = "";
    }


}

Quindi, se è necessario eseguire l'analisi, utilizzare quanto segue:

String robotJson = "{
                        \"version\": \"JellyBean\",
                        \"age\": 3,
                        \"robotName\": \"Droid\"
                   }";

Gson gson = new Gson();
Robot robot = gson.fromJson(robotJson, Robot.class);

Analizzare una lista:

Quando si recupera un elenco di oggetti JSON, spesso si vorrà analizzarli e convertirli in oggetti Java.

La stringa JSON che tenteremo di convertire è la seguente:

{
  "owned_dogs": [
    {
      "name": "Ron",
      "age": 12,
      "breed": "terrier"
    },
    {
      "name": "Bob",
      "age": 4,
      "breed": "bulldog"
    },
    {
      "name": "Johny",
      "age": 3,
      "breed": "golden retriever"
    }
  ]
}

Questo particolare array JSON contiene tre oggetti. Nel nostro codice Java vorremmo mappare questi oggetti su oggetti Dog . Un oggetto Dog dovrebbe assomigliare a questo:

private class Dog {
    public String name;
    public int age;

    @SerializedName("breed")
    public String breedName;
}

Per convertire l'array JSON in un Dog[] :

Dog[] arrayOfDogs = gson.fromJson(jsonArrayString, Dog[].class);

Conversione di un Dog[] in una stringa JSON:

String jsonArray = gson.toJson(arrayOfDogs, Dog[].class);

Per convertire l'array JSON in un ArrayList<Dog> possiamo fare quanto segue:

Type typeListOfDogs = new TypeToken<List<Dog>>(){}.getType();
List<Dog> listOfDogs = gson.fromJson(jsonArrayString, typeListOfDogs);

Il tipo Type typeListOfDogs definisce come dovrebbe apparire un elenco di oggetti Dog . GSON può utilizzare questo oggetto di tipo per mappare l'array JSON ai valori corretti.

In alternativa, la conversione di un List<Dog> in un array JSON può essere eseguita in modo simile.

String jsonArray = gson.toJson(listOfDogs, typeListOfDogs);