以下jsonArray
是Web服务的结果:
{
"property":
{
"id": "2",
"title": "qqqqqqq",
"alias": "wwwwwwwww"
},
"foodList":
[
{
"meal": "1111",
"food": "1111111111"
},
{
"meal": "22222",
"food": "2222222222"
},
{
"meal": "3333333",
"food": "3333333333"
}
]
}
我试着去解析它,但是我收到了这个错误:
错误
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was
BEGIN_ARRAY at line 1 column 131 path $.foodList
类模型与结果一样:
public class FoodLists {
private String userId;
private Property property;
private FoodList foodList;
public class Property {
private int id;
private String title;
private String alias;
/* Setter and Getters*/
}
public class FoodList {
private String meal;
private String food;
/* Setter and Getters*/
}
/* Setter and Getters*/
}
以及我的改进方法:
private void getUserFoodsLists() {
FoodLists getFoods = new FoodLists();
getFoods.setUserId("301323");
Call<FoodLists> call = behandamService.getFoodListsCall(getFoods);
call.enqueue(new Callback<FoodLists>() {
@Override
public void onResponse(Call<FoodLists> call, Response<FoodLists> response) {
if (response.isSuccessful()) {
}
}
@Override
public void onFailure(Call<FoodLists> call, Throwable t) {
Log.e("Err: ", t.getMessage());
}
});
}
如何通过改造获得此阵列,提前致谢
答案 0 :(得分:1)
java.lang.IllegalStateException:预期BEGIN_OBJECT但是 BEGIN_ARRAY在第1行第131栏路径$ .foodList
表示响应返回JsonArray
,但您告诉Gson
将其解析为JsonObject
。在您的模型类中,更改
FoodList foodList;
与
List<FoodList> foodList;
答案 1 :(得分:0)
您当前拥有的FoodLists
模型与您从服务器收到的JSON响应不匹配,因此您会收到错误。
这里有两个选项 - 显而易见的是更改您的POJO以匹配响应(在其他答案之一中提供了有效的POJO)。这里的缺点是POJO可能看起来很丑陋并且有一些你并不真正需要的信息。
如果你想让你的POJO保持清洁,可能会有更好的选择,例如,如果你在其他地方使用它们,例如作为数据库模型或其他东西。 在这种情况下,您可以使用自定义JsonDeserializer并手动将响应转换为所需的POJO。如果您对此方法感兴趣,HERE就是如何使用它的完整示例。