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;
    }
}
如果object
courier
没有数据,我得到数组
“数据”:[]
,如果object
courier
有数据,我得到对象:

"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