2013-07-15 29 views
8

Tôi có mảng json này:Không thể phân tích mảng Json sử dụng Gson

[ 
{ 
"id":18, 
"city":"הרצליה", 
"street":"החושלים 1", 
"zipcode":121209, 
"state":"IL", 
"lat":32.158138, 
"lng":34.807838 
}, 
{ 
"id":19, 
"city":"הרצליה", 
"street":"אבא אבן 1", 
"zipcode":76812, 
"state":"IL", 
"lat":32.161041, 
"lng":34.810410 
} 
] 

Và tôi có lớp này để giữ dữ liệu:

public class MapData { 
    private int id; 
    private String city; 
    private String street; 
    private String state; 
    private int zipcode; 
    private double lat; 
    private double lng; 

    public MapData(int id, String city, String street, String state, 
      int zipcode, double lat, double lng) {   
     this.id = id; 
     this.city = city; 
     this.street = street; 
     this.state = state; 
     this.zipcode = zipcode; 
     this.lat = lat; 
     this.lng = lng; 
    } 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getCity() { 
     return city; 
    } 
    public void setCity(String city) { 
     this.city = city; 
    } 
    public String getStreet() { 
     return street; 
    } 
    public void setStreet(String street) { 
     this.street = street; 
    } 
    public String getState() { 
     return state; 
    } 
    public void setState(String state) { 
     this.state = state; 
    } 
    public int getZipcode() { 
     return zipcode; 
    } 
    public void setZipcode(int zipcode) { 
     this.zipcode = zipcode; 
    } 
    public double getLat() { 
     return lat; 
    } 
    public void setLat(double lat) { 
     this.lat = lat; 
    } 
    public double getLng() { 
     return lng; 
    } 
    public void setLng(double lng) { 
     this.lng = lng; 
    } 

} 

Tôi đang cố gắng để chuyển đổi thành một json danh sách MapData đối tượng:

Type type = new TypeToken<List<MapData>>(){}.getType(); 
return gson.fromJson(jsonString, type); 

Nhưng tôi nhận được lỗi này:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.deliveries.models.MapData 

Tôi đang làm gì sai?

+2

Loại tẩy xoá này. Gson biết rằng anh ta phải deserialize java.util.List, nhưng không có ý tưởng, những gì các đối tượng nên ông đưa vào nó, vì vậy ông sử dụng các loại nội bộ. –

+0

@ ŁukaszLech - nhưng tôi đã nói với nó rằng một Danh sách và theo tài liệu Gson đó là cách để làm điều đó ?! – Tomer

+0

Phương thức của bạn có trả về 'MapData' hoặc' Danh sách '? Tôi nghi ngờ bạn có thể trả lại loại sai. –

Trả lời

31

Tôi nghi ngờ rằng phương pháp gọi fromJson đang trả về loại sai. Nó phải trả về một List<MapData> thay vì MapData.

Cái gì như:

public static List<MapData> getData(){ 
    Gson gson = new Gson(); 
    String jsonString = "[{\"id\":18,\"city\":\"test\",\"street\":\"test 1\",\"zipcode\":121209,\"state\":\"IL\",\"lat\":32.158138,\"lng\":34.807838},{\"id\":19,\"city\":\"test\",\"street\":\"1\",\"zipcode\":76812,\"state\":\"IL\",\"lat\":32.161041,\"lng\":34.810410}]"; 
    Type type = new TypeToken<List<MapData>>(){}.getType(); 
    return gson.fromJson(jsonString, type);  
} 

Tôi có một ví dụ làm việc đầy đủ về vấn đề của bạn trong Gist

+0

Cảm ơn, tôi sẽ kiểm tra nó và nếu nó hoạt động tôi sẽ đánh dấu nó là câu trả lời đúng – Tomer

+0

Sau khi tìm kiếm 2 ngày, cuối cùng đã có cách tiếp cận chính xác để giải quyết. Cảm ơn rất nhiều Kevin! – PsyGik

-1
string Json="some Json String"; 
JavaScriptSerializer Js = new JavaScriptSerializer(); 
MapData ObjMapDat = new MapData(); 
ObjMapDat =Js.Deserialize<MapData>(Json);