2017-04-17 94 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并用它代替列出门票;