2017-04-17 111 views
0

我有以下模式:GSON:空JSON轉換錯誤

public class EventSchedule { 

    private int id; 
    private String date; 
    private String time; 
    private JSONArray tickets; 
    private JSONArray extras; 
    private JSONObject venue; 

    public EventSchedule(int id, String date, String time, JSONArray tickets, 
         JSONArray extras, JSONObject venue) { 

     this.id = id; 
     this.date = date; 
     this.time = time; 
     this.tickets = tickets; 
     this.extras = extras; 
     this.venue = venue; 
    }; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public String getTime() { 
     return time; 
    } 

    public void setTime(String time) { 
     this.time = time; 
    } 

    public JSONArray getTickets() { 
     return tickets; 
    } 

    public void setTickets(JSONArray tickets) { 
     this.tickets = tickets; 
    } 

    public JSONArray getExtras() { 
     return extras; 
    } 

    public void setExtras(JSONArray extras) { 
     this.extras = extras; 
    } 

    public JSONObject getVenue() { 
     return venue; 
    } 

    public void setVenue(JSONObject venue) { 
     this.venue = venue; 
    } 
} 

和我有一個JSON陣列I想轉換到上面用下面的代碼的所述模型的ArrayList

Gson gson = new Gson(); 
Type type = new TypeToken<List<EventSchedule>>(){}.getType(); 
List<EventSchedule> schedules = gson.fromJson(mEvent.getSchedules().toString(), type); 

但是,當我試圖運行這個我的活動崩潰。這使我對我的第一個錯誤:

Expected BEGIN_OBJECT but was BEGIN_ARRAY

所以我想這是不可能的轉換與JSONArray的模型,因此我加入transient排除所有JSONArray列,這一次它運行,並沒有崩潰。

現在對於我的第二個問題,每當我嘗試獲得JSONObject場地時,它總是變空。我不知道爲什麼。

所以我現在的問題是如何解決我的問題JSONArrayJSONObject,以便我能夠轉換爲ArrayList

+0

你混淆了事情。除非添加了自定義類型適配器(您可能希望使用'com.google.gson.Json ***'),否則Gson不能使用'JSON ***'。你的'EventSchedule'是原語和JSON樹對象的混合 - 你應該用像'EventSchedule'這樣的映射替換JSON樹,甚至不要使用'Json ***'。另外,'預計BEGIN_OBJECT但是BEGIN_ARRAY'是一個過於一般的錯誤,可能由於一千個原因而發生:發佈_minimum_ JSON文檔可能會有所幫助。另外,我懷疑'票據'是錯誤的根源(JSON中的'[...]',但'JSONArray'的期望對象)。 –

+0

謝謝,但我很困惑,你說我應該怎麼做?你說什麼映射我應該替換我的JSON ***? – user3718908

+0

扔掉'JSON ***'類型並用'EventSchedule'等類替換'JSON ***'字段。 'JSONArray'應該替換爲'List <...>'或者一個數組。 –

回答

0

Expected BEGIN_OBJECT but was BEGIN_ARRAY

您收到此錯誤的原因是因爲你在你的類中聲明的對象。

private JSONArray tickets; //Object ref. of JSONArray 
private JSONArray extras; //Object ref. of JSONArray 

但是包括對象的列表,以便在轉換過程中它找到對象,而不是列出你的迴應

解決方案:

使一類是將代表您的JSONObject在JSONArray並用它代替列出門票;