预期 BEGIN_OBJECT 但 BEGIN_ARRAY 但 json 响应已经有一个对象
Expected BEGIN_OBJECT but was BEGIN_ARRAY but the json respone has already an object
我正在学习改造 2 并遇到这样的错误:
W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 94 path $.riceField
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
这是代码
api
@GET(Server.riceFields+"/{id}")
Call<Product> showRiceFields(@Path("id") int id);
型号
public class Product {
private Status status;
private RiceField riceField;
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public RiceField getRiceField() {
return riceField;
}
public void setRiceField(RiceField riceField) {
this.riceField = riceField;
}
}
和
ProductsEndPoint.productsEndPoint().showRiceFields(id)
.enqueue(new Callback<Product>() {
@Override
public void onResponse(Call<Product> call, Response<Product> response) {
if (response.isSuccessful()) {
RiceField riceField = response.body().getRiceField();
product = riceField;
setView(product);
}
}
@Override
public void onFailure(Call<Product> call, Throwable t) {
t.printStackTrace();
}
});
json 回复
{
"status": {
"code": 200,
"message": "Succes",
"description": "Data berhasil diambil"
},
"riceField": [
{
"id": 21,
"title": "Nihil qui placeat tempora magnam aut omnis quae alias aliqua Molestiae culpa",
"harga": 45,
"luas": 20,
"alamat": "Ratione cum et aliqu",
"maps": "Quia aut ut dolores nisi hic necessitatibus asperiores odio dolores ut non voluptatum ipsum enim id",
"deskripsi": "Voluptatum repellend",
"sertifikasi": "sgb",
"tipe": "jual",
"created_at": "2021-06-08T08:11:00.000000Z",
"updated_at": "2021-06-08T08:11:00.000000Z",
"user_id": 2,
"vestige_id": 2,
"irrigation_id": 3,
"region_id": 3,
"verification_id": 2
}
]
}
我已经像这样在回调中添加列表 <List<Product>>
并且错误变为
BEGIN_ARRAY but was BEGIN_OBJECT
那么,我该怎么办?
感谢并抱歉我的英语不好
解决方案:我应该在每个数组的模型上添加列表 json
您使用的型号有误。根据您的 json 输出,您的模型必须是以下 类
public class Output{
public Status status;
public List<RiceField> riceField;
}
public class RiceField {
public Integer id;
public String title;
public Integer harga;
public Integer luas;
public String alamat;
public String maps;
public String deskripsi;
public String sertifikasi;
public String tipe;
public String createdAt;
public String updatedAt;
public Integer userId;
public Integer vestigeId;
public Integer irrigationId;
public Integer regionId;
public Integer verificationId;
}
public class Status {
public Integer code;
public String message;
public String description;
}
有关更多信息,请使用此网站:
json to java class
我正在学习改造 2 并遇到这样的错误:
W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 94 path $.riceField at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
这是代码
api
@GET(Server.riceFields+"/{id}")
Call<Product> showRiceFields(@Path("id") int id);
型号
public class Product {
private Status status;
private RiceField riceField;
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public RiceField getRiceField() {
return riceField;
}
public void setRiceField(RiceField riceField) {
this.riceField = riceField;
}
}
和
ProductsEndPoint.productsEndPoint().showRiceFields(id)
.enqueue(new Callback<Product>() {
@Override
public void onResponse(Call<Product> call, Response<Product> response) {
if (response.isSuccessful()) {
RiceField riceField = response.body().getRiceField();
product = riceField;
setView(product);
}
}
@Override
public void onFailure(Call<Product> call, Throwable t) {
t.printStackTrace();
}
});
json 回复
{
"status": {
"code": 200,
"message": "Succes",
"description": "Data berhasil diambil"
},
"riceField": [
{
"id": 21,
"title": "Nihil qui placeat tempora magnam aut omnis quae alias aliqua Molestiae culpa",
"harga": 45,
"luas": 20,
"alamat": "Ratione cum et aliqu",
"maps": "Quia aut ut dolores nisi hic necessitatibus asperiores odio dolores ut non voluptatum ipsum enim id",
"deskripsi": "Voluptatum repellend",
"sertifikasi": "sgb",
"tipe": "jual",
"created_at": "2021-06-08T08:11:00.000000Z",
"updated_at": "2021-06-08T08:11:00.000000Z",
"user_id": 2,
"vestige_id": 2,
"irrigation_id": 3,
"region_id": 3,
"verification_id": 2
}
]
}
我已经像这样在回调中添加列表 <List<Product>>
并且错误变为
BEGIN_ARRAY but was BEGIN_OBJECT
那么,我该怎么办?
感谢并抱歉我的英语不好
解决方案:我应该在每个数组的模型上添加列表 json
您使用的型号有误。根据您的 json 输出,您的模型必须是以下 类
public class Output{
public Status status;
public List<RiceField> riceField;
}
public class RiceField {
public Integer id;
public String title;
public Integer harga;
public Integer luas;
public String alamat;
public String maps;
public String deskripsi;
public String sertifikasi;
public String tipe;
public String createdAt;
public String updatedAt;
public Integer userId;
public Integer vestigeId;
public Integer irrigationId;
public Integer regionId;
public Integer verificationId;
}
public class Status {
public Integer code;
public String message;
public String description;
}
有关更多信息,请使用此网站: json to java class