Retrofit将对象数组转换为GSON Error

我使用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 dataList; public List getElements() { return dataList; } public class element { @SerializedName("key1") private String key1; @SerializedName("key2") private String key2; // Getters and Setters } } 

如果您有任何想法,请告诉我。 谢谢

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

之前

 //*****MyData*****// public class MyData { private List dataList; public List 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 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> myDataCallbackListener) { super(myDataCallbackListener); } @Override public void success(List data, Response response) { if (myDataCallbackListener != null) { myDataCallbackListener.onCallbackComplete(true, response, MyDataCallback.CALLBACK_SUCCESS_MESSAGE, data); } } } 

正如Dave在他的评论中提到的那样,你在类中进行递归似乎很奇怪,我假设它是你的响应对象。 (您的class级“数据”有一个“数据”对象列表)。

我会建议一些像这样的更紧张的前进:

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

或者因为你在当地也许你可以买杰克啤酒:)从他的照片,我会检查Rouge Ales,21修正案或我最喜欢的最后一次在SF – Magnolia

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

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

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