Java 应为BEGIN_数组,但在第1行第5921列路径$.data[5].courier.data处为BEGIN_对象
我有一个模型对象:Java 应为BEGIN_数组,但在第1行第5921列路径$.data[5].courier.data处为BEGIN_对象,java,android,json,response,Java,Android,Json,Response,我有一个模型对象: public class Courier { @SerializedName("data") private List<User> data = null; public Courier() { } public Courier(List<User> data) { this.data = data; } public List<User> getData() {
public class Courier {
@SerializedName("data")
private List<User> data = null;
public Courier() {
}
public Courier(List<User> data) {
this.data = data;
}
public List<User> getData() {
return data;
}
public void setData(List<User> data) {
this.data = data;
}
}
如果objectcourier
没有数据,我得到数组“数据”:[]
,如果objectcourier
有数据,我得到对象:
"courier": {
"data": {
"id": 122,
"email": null,
"phone": "73339999999",
"photo": null,
"rating": 0
}
}
然后我得到一个错误。。。请告诉我如何在android应用程序中处理此情况 是您开始在客户端使用JSON时最常见的错误之一,对于android,请参考此了解 要理解这种错误,最好的途径就是阅读这篇文章 一篇规范性的文章 最好是阅读并理解它,要求一个简单的解决方案,因为你会经常犯这个错误 在反序列化时,Gson需要一个JSON对象,但发现一个 JSON数组 JSON对象由
{
JSON数组由[
您需要的是调整类Courier,以正确的方式反序列化JSON响应
请记住,JSON数组在java中被反序列化为集合类型或数组类型;
请注意,使用两次数据会造成混淆
最重要的是,第一个数据是
public class MyPojo
{
private Data[] data;
public Data[] getData ()
{
return data;
}
public void setData (Data[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
数据类
public class Data
{
private String id;
private String title;
private String description;
private Courier courier;
private String arrival;
private String departure;
public String getId ()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle ()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public Courier getCourier ()
{
return courier;
}
public void setCourier (Courier courier)
{
this.courier = courier;
}
public String getArrival ()
{
return arrival;
}
public void setArrival (String arrival)
{
this.arrival = arrival;
}
public String getDeparture ()
{
return departure;
}
public void setDeparture (String departure)
{
this.departure = departure;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", description = "+description+", courier = "+courier+", arrival = "+arrival+", departure = "+departure+"]";
}
}
public class Courier
{
private String[] data;
public String[] getData ()
{
return data;
}
public void setData (String[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
Courier.class
public class Data
{
private String id;
private String title;
private String description;
private Courier courier;
private String arrival;
private String departure;
public String getId ()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle ()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public Courier getCourier ()
{
return courier;
}
public void setCourier (Courier courier)
{
this.courier = courier;
}
public String getArrival ()
{
return arrival;
}
public void setArrival (String arrival)
{
this.arrival = arrival;
}
public String getDeparture ()
{
return departure;
}
public void setDeparture (String departure)
{
this.departure = departure;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", description = "+description+", courier = "+courier+", arrival = "+arrival+", departure = "+departure+"]";
}
}
public class Courier
{
private String[] data;
public String[] getData ()
{
return data;
}
public void setData (String[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
是在客户端开始使用JSON时最常见的错误之一,对于android,请参考此了解
要理解这种错误,最好的途径就是阅读这篇文章
一篇规范性的文章
最好是阅读并理解它,要求一个简单的解决方案,因为你会经常犯这个错误
在反序列化时,Gson需要一个JSON对象,但发现一个
JSON数组
JSON对象由{
JSON数组由[
您需要的是调整类Courier,以正确的方式反序列化JSON响应
请记住,JSON数组在java中被反序列化为集合类型或数组类型;
请注意,使用两次数据会造成混淆
最重要的是,第一个数据是
public class MyPojo
{
private Data[] data;
public Data[] getData ()
{
return data;
}
public void setData (Data[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
数据类
public class Data
{
private String id;
private String title;
private String description;
private Courier courier;
private String arrival;
private String departure;
public String getId ()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle ()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public Courier getCourier ()
{
return courier;
}
public void setCourier (Courier courier)
{
this.courier = courier;
}
public String getArrival ()
{
return arrival;
}
public void setArrival (String arrival)
{
this.arrival = arrival;
}
public String getDeparture ()
{
return departure;
}
public void setDeparture (String departure)
{
this.departure = departure;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", description = "+description+", courier = "+courier+", arrival = "+arrival+", departure = "+departure+"]";
}
}
public class Courier
{
private String[] data;
public String[] getData ()
{
return data;
}
public void setData (String[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
Courier.class
public class Data
{
private String id;
private String title;
private String description;
private Courier courier;
private String arrival;
private String departure;
public String getId ()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle ()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public Courier getCourier ()
{
return courier;
}
public void setCourier (Courier courier)
{
this.courier = courier;
}
public String getArrival ()
{
return arrival;
}
public void setArrival (String arrival)
{
this.arrival = arrival;
}
public String getDeparture ()
{
return departure;
}
public void setDeparture (String departure)
{
this.departure = departure;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", description = "+description+", courier = "+courier+", arrival = "+arrival+", departure = "+departure+"]";
}
}
public class Courier
{
private String[] data;
public String[] getData ()
{
return data;
}
public void setData (String[] data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+"]";
}
}
我建议您只需创建一个包含字段id
、email
等的类Data
,并在类Courier
中创建字段数据
,而不是列表数据
编辑:然后可以使用JsonDeserializer
。只需删除@SerializedName(“数据”)
字段上的@SerializedName(“数据”)
,这样Json就不会解析此字段。然后创建一个类:
public class CourierDeserializer implements JsonDeserializer<Courier> {
@Override
public Courier deserialize(final JsonElement json, final Type type,
final JsonDeserializationContext context) {
Courier result = new Gson().fromJson(json, Courier.class);
try {
if (json != null) {
result.setData((Data) context.deserialize(json, Data.class));
}
} catch (JsonParseException e) {
result.setData(null);
}
return result;
}
}
如果您使用改型。我建议您只需创建一个带有字段id
,email
等的类数据
,并在类Courier
中创建字段数据
,而不是列表数据
编辑:然后可以使用JsonDeserializer
。只需删除@SerializedName(“数据”)
字段上的@SerializedName(“数据”)
,这样Json就不会解析此字段。然后创建一个类:
public class CourierDeserializer implements JsonDeserializer<Courier> {
@Override
public Courier deserialize(final JsonElement json, final Type type,
final JsonDeserializationContext context) {
Courier result = new Gson().fromJson(json, Courier.class);
try {
if (json != null) {
result.setData((Data) context.deserialize(json, Data.class));
}
} catch (JsonParseException e) {
result.setData(null);
}
return result;
}
}
如果使用改型。很抱歉,但不是,它将出错-预期的BEGIN\u对象是BEGIN\u ArrayStory,但不是,它将出错-预期的BEGIN\u对象是BEGIN\u ArrayStory