2013-03-01 171 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 
}