改造将对象数组转换为GSON错误

我正在使用Retrofit发出一个HTTP请求,返回一个对象的数组,我收到以下错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY 

返回的响应预计如下所示:

 [ {key1: "value1", key2: "value2"}, {key1: "value1", key2: "value2"}, ... ] 

我有以下类,用于序列化数据:

 public class data { private List<element> dataList; public List<element> getElements() { return dataList; } public class element { @SerializedName("key1") private String key1; @SerializedName("key2") private String key2; // Getters and Setters } } 

请让我知道,如果你有任何想法。 谢谢

Solutions Collecting From Web of "改造将对象数组转换为GSON错误"

该错误实际上是在我的Retrofitcallback的实现。 我的实现期望在这种情况下应该期待一个数组的对象。 感谢大家的帮助。

之前

 //*****MyData*****// public class MyData { private List<Data> dataList; public List<Data> getElements() { return dataList; } public class Data { @SerializedName("key1") private String key1; @SerializedName("key2") private String key2; // Getters and Setters } } //*****Callback Implementation*****// public class MyDataCallback extends Callback { public MyDataCallback(MyDataCallbackListener<MyData> myDataCallbackListener) { super(myDataCallbackListener); } @Override public void success(MyData data, Response response) { if (myDataCallbackListener != null) { myDataCallbackListener.onCallbackComplete(true, response, MyDataCallback.CALLBACK_SUCCESS_MESSAGE, data); } } } 

 //*****Data*****// public class Data { @SerializedName("key1") private String key1; @SerializedName("key2") private String key2; // Getters and Setters } //*****Callback Implementation*****// public class MyDataCallback extends Callback { public MyDataCallback(MyDataCallbackListener<List<Data>> myDataCallbackListener) { super(myDataCallbackListener); } @Override public void success(List<Data> data, Response response) { if (myDataCallbackListener != null) { myDataCallbackListener.onCallbackComplete(true, response, MyDataCallback.CALLBACK_SUCCESS_MESSAGE, data); } } } 

正如Dave在他的评论中所提到的那样,我认为你在课堂上有recursion是你的回应对象,这看起来很奇怪。 (你的类“数据”有一个“数据”对象的列表)。

我会提出一些更为艰难的事情,比如:

 public class ResponseObject { private ArrayList<DataObject> mDataObjects; public ArrayList<DataObject> getDataObjects() { return mDataObjects; } private class DataObject { private String key1; private String key2; public String getKey1() { return key1; } public String getKey2() { return key2; } } } 

或者因为你是当地人,也许你可以买杰克啤酒:)从他的照片,我会检查胭脂阿莱斯,21修正案或我最后一次我在SF – 白玉兰

从数组开始,这不是有效的JSON。 你需要返回这样的东西:

 { dataList: [ { key1: "value1", key2: "value2" }, { key1: "value3", key2: "value4" } ] } 

然后您可以使用GSON将其反序列化到您的data类中。