2013-03-01 174 views
10

我得到了一個JSON數組從服務器response轉換JSON數組Java列表對象

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

我想用gson上述JSON數據轉換爲一個Java對象List<Person>。我嘗試以下方法:

首先,我創建了一個Person.java類:

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; 
    } 
} 

然後,在我的服務類,我做了以下內容:

//'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 
} 

我異常java.lang.ClassCastException:java.util.LinkedHashMap不能轉換爲Person。如何擺脫我的問題?我只是想將json數組轉換爲List<Person>對象。任何幫助?

回答

21

您需要使用超類型標記進行解組,以便Gson知道列表中的泛型是什麼。試試這個:

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

並通過結果這樣重複:

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