2013-03-01 73 views
10

Tôi có một mảng json từ máy chủ response:Chuyển đổi json mảng đến một đối tượng danh sách java

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

Tôi muốn sử dụng gson để chuyển đổi dữ liệu json trên để một List<Person> đối tượng Java. Tôi đã thử các cách sau:

Đầu tiên, tôi đã tạo ra một Person.java lớp:

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

Sau đó, trong lớp dịch vụ của tôi, tôi đã làm như sau:

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

tôi Ngoại lệ java.lang.ClassCastException: java.util.LinkedHashMap không thể truyền tới Person. Làm thế nào để thoát khỏi vấn đề của tôi? Tôi chỉ muốn chuyển đổi mảng json thành một đối tượng List<Person>. Bất kỳ giúp đỡ?

Trả lời

21

Bạn cần sử dụng mã thông báo supertype để không sửa đổi, để Gson biết loại chung chung trong danh sách của bạn là gì. Hãy thử điều này:

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

Và lặp thông qua các kết quả như vậy:

for(Person person : personList) { 
    // some code here 
} 
Các vấn đề liên quan