2012-07-01 47 views
5

Tôi gặp sự cố khi tạo ánh xạ cho một json mà tôi muốn phân tích bằng cách sử dụng json. Nó rất cụ thể, về một tệp json với một mảng json với các đối tượng trong đó.Phân tích tệp json với gson

jsonfile của tôi bắt đầu như thế này:

[ 
    { 
     "venue": { 
      "venue_seasons": [ 
       { 
        "created_at": "2011-12-25T23:00:28Z", 
        "updated_at": "2011-12-28T15:13:53Z", 
        "start_timestamp": 1293840000, 
        "id": 337, 
        "end": "2011-12-24T00:00:00Z", 
        "enabled": true, 
        "start": "2011-01-01T00:00:00Z", 
        "season_openings": [ … ], 
        "end_timestamp": 1324684800 
       }, 
       { … } 
      ], 
      "address": "someadress", 
      "city": "cityname", 
      "name": "name", 
      "created_at": "2011-03-31T07:55:33Z", 
     etcetera 
    } 
    "venue":{another venue 

Vì vậy, lần đầu tiên một mảng, hơn một đối tượng (địa điểm) với rất nhiều đối tượng trong nó (i loại bỏ hầu hết trong số họ, vì thats không quan trọng đối với câu hỏi của tôi) và một số mảng (như season_openings).

Mã phân tích cú pháp của tôi hoạt động như thế này, tôi sử dụng gson. Inputstream hoạt động tốt.

Reader reader = new InputStreamReader(inputStream); 
JsonResponse venueResponse = gson.fromJson(reader, JsonResponse.class);    
List<Venues> results = venueResponse.venue; 

với JsonResponse lớp:

public class JsonResponse { 
    public List<Venues> venue; 
} 

và Venues.class:

public class Venues { 

    public List<VenueSeasons> venue_seasons; 

    @SerializedName("adress") 
    public String getAdress; 

    @SerializedName("city") 
    public String getCity; 

    @SerializedName("country") 
    public String getCountry; etcetera 
} 

Nhưng khi tôi chạy mã này tôi nhận được một lỗi:

Unable to start activity ComponentInfo{com.hera.android.JSON/com.hera.android.JSON.TestParser2Activity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

Ofcourse tôi có thể đọc lỗi: nó mong đợi một o bjects nhưng nhận được một mảng. Tôi đa dạng rất nhiều với jsonresponse.class khác nhau và thậm chí với việc đặt toàn bộ mảng json trong một đối tượng json (những gì không thực sự là một giải pháp vì tôi cần phải làm việc với loại jsonfile này). Nhưng mỗi khi tôi nhận được lỗi này hoặc một lỗi tương tự.

Tôi nghĩ rằng tôi gần với một giải pháp, bất cứ ai có thể nhìn thấy những gì tôi chỉ có thể không và cho tôi một bàn tay giúp đỡ? Cảm ơn.

+0

Với JSON mẫu không hợp lệ và mã Java mẫu không hợp lệ không hoàn chỉnh, những người có thể cố gắng giúp đỡ còn lại đang đoán về những gì đang diễn ra. Đó là một phương pháp hay để đăng các ví dụ hoàn chỉnh tối thiểu thể hiện vấn đề đang cố gắng giải quyết. –

Trả lời

4

thử gọi Gson như thế này:

List<Venues> venues = gson.fromJson(reader, new TypeToken<List<Venues>>() {}.getType()); 

này hoạt động bởi vì tài liệu JSON của bạn là một List, không phải là một đối tượng mà có một danh sách là một trong những thuộc tính của nó.

+0

Cảm ơn, nó đã hoạt động! – Jasper

+0

tôi đã thử: String name = venues.get (12) .getName; Log.i (venuetag, "tên của địa điểm 12 là:" + tên); nhưng nó cung cấp cho tên một giá trị null. Tôi làm đúng chứ hả? Tôi đã sử dụng venues.size() và nó trả lại 471, do đó, im chắc chắn danh sách của tôi hoạt động .... – Jasper

+0

@ Jasper, tôi đoán rằng cấu trúc dữ liệu Java được deserialized không đủ tốt khớp với cấu trúc JSON và Gson do đó không ràng buộc thành phần "name" JSON vào trường "tên" Java. –

Các vấn đề liên quan