2013-03-01 13 views
10

Ich habe eine json Array vom Server response:Convert json Array in eine Java-Liste Objekt

[{"id":1, "name":"John", "age": 20},{"id":3, "name":"Tomas", "age": 29}, {"id":12, "name":"Kate", "age": 32}, ...] 

ich gson verwenden möchten, die oben json Daten an ein Java List<Person> Objekt zu konvertieren. Ich habe versucht, die folgende Art und Weise:

Zum einen habe ich eine Person.java Klasse:

public class Person{ 
    private long id; 
    private String name; 
    private int age; 

    public long getId(){ 
    return id; 
    } 

    public String getName(){ 
    return name; 
    } 

    public int getAge(){ 
    return age; 
    } 
} 

Dann in meiner Dienstklasse, habe ich die folgenden:

//'response' is the above json array 
List<Person> personList = gson.fromJson(response, List.class); 

for(int i=0; i<personList.size(); i++){ 
    Person p = personList.get(i); //java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Person 
} 

Ich habe Ausnahme java.lang.ClassCastException: java.util.LinkedHashMap kann nicht in Person umgewandelt werden. Wie werde ich mein Problem los? Ich möchte nur das JSON-Array in ein List<Person> Objekt konvertieren. Irgendeine Hilfe?

Antwort

21

Sie müssen ein Supertype-Token für das Unmarshalling verwenden, damit Gson weiß, was der generische Typ in Ihrer Liste ist. Versuchen Sie folgendes:

TypeToken<List<Person>> token = new TypeToken<List<Person>>(){}; 
List<Person> personList = gson.fromJson(response, token.getType()); 

und durchlaufen die Ergebnisse als solche:

for(Person person : personList) { 
    // some code here 
}