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
场地时,它总是变空。我不知道为什么。
所以我现在的问题是如何解决我的问题JSONArray
和JSONObject
,以便我能够转换为ArrayList
。
你混淆了事情。除非添加了自定义类型适配器(您可能希望使用'com.google.gson.Json ***'),否则Gson不能使用'JSON ***'。你的'EventSchedule'是原语和JSON树对象的混合 - 你应该用像'EventSchedule'这样的映射替换JSON树,甚至不要使用'Json ***'。另外,'预计BEGIN_OBJECT但是BEGIN_ARRAY'是一个过于一般的错误,可能由于一千个原因而发生:发布_minimum_ JSON文档可能会有所帮助。另外,我怀疑'票据'是错误的根源(JSON中的'[...]',但'JSONArray'的期望对象)。 –
谢谢,但我很困惑,你说我应该怎么做?你说什么映射我应该替换我的JSON ***? – user3718908
扔掉'JSON ***'类型并用'EventSchedule'等类替换'JSON ***'字段。 'JSONArray'应该替换为'List <...>'或者一个数组。 –