在尝试将json文本文件解析为餐厅对象的数组列表时,我遇到了错误“应为BEGIN\u数组,但在第1行第2列路径处为BEGIN\u对象。”我不知道哪里弄错了,因为我的Restaurant类中的数据成员与json文件中的字段完全对应。
主要的
List<Restaurant> restaurants = new ArrayList<Restaurant>();
......
fr = new FileReader(filename);
br = new BufferedReader(fr);
Gson gson = new Gson();
TypeToken<List<Restaurant>> token = new TypeToken<List<Restaurant>>() {};
restaurants = gson.fromJson(br, token.getType());
餐厅类
public class Restaurant {
public String name;
public String address;
public double latitude;
public double longitude;
public List<String> menu = new ArrayList<String>();
//public double distance;
public Restaurant(String name, String address, double latitude, double longitude, List<String> menu) {
this.name = name;
this.address = address;
this.latitude = latitude;
this.longitude = longitude;
this.menu = menu;
//this.distance = 0;
}
}
txt文件
{
"data": [
{
"name": "Northern Cafe",
"address": "2904 S Figueroa Street",
"latitude": 34.025550,
"longitude": -118.277440,
"menu": [
"orange chicken",
"rice",
"noodles",
"dumplings"
]
},
{
"name": "The Lab Gastropub",
"address": "3500 S Figueroa Street",
"latitude": 34.019940,
"longitude": -118.280530,
"menu": [
"fried chicken",
"chicken sandwich",
"spinach dip",
"cheeseburger",
"fries",
"milkshake"
]
},
{
"name": "Taco Bell",
"address": "3629 S Vermont Ave",
"latitude": 34.022360,
"longitude": -118.291850,
"menu": [
"chicken taco",
"beef taco",
"fries",
"soda",
"cheese dipping sauce"
]
}
]
}
您正试图反序列化到一个餐厅数组中,但您的文件有一个对象,只有一个字段<代码>数据 。将餐厅列表复制到外部级别应该可以解决您的问题。
我认为您的问题是缺少了更高的结构:这一点可以通过以下事实得到证实:GSON需要一个BEGIN\u数组,但得到了一个BEGIN\u对象。前者是令牌,后者是令牌。
{
"data": array
}
这意味着您应该有一个映射:
class Data {
List<Restaurant> data;
}
并使用以下方法阅读:
TypeToken<Data> token = new TypeToken<Data>() {};
data = gson.fromJson(br, token.getType());
或者您应该首先使用适当的API(我不知道,我不使用GSON)进入数据节点,然后读取其值作为列表
请注意,新的TypeToken
data = gson.fromJson(br, Data.class);
问题内容: 我遇到错误了。 由于以下原因,无法解析JSON:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第2列为BEGIN_OBJECT 服务器网址 执行请求 上课后 我该如何解决? 问题答案: 您在注释中声明返回的JSON是这样的: 您告诉Gson您有一个对象数组:
问题内容: 我从Web服务获取JSon数据,示例数据如下: 当我尝试将其转换时,它将引发错误,我这样做是: 我的班级是: LogCat说: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY 问题答案: 错误说明发生了什么问题…您返回的是数组
问题内容: 我知道这不是第一次有人问这个问题,但是有了Retrofit2,我找不到适合我问题的正确解决方案。我遵循了在线教程,效果很好。当我将相同的代码应用于自己的端点时,会出现以下异常:我不知道该如何解决。 接口: 客户代码: 此代码与此有效负载一起使用: 但与此不: 我的音乐课: 问题答案: 当您说“此代码正在使用此有效负载:…而不是与此有效:: …”时,这是预期的,这就是假定的工作方式。实际
我有一个应用程序,它正在查询一个endpoint,然后简单地将响应放在ListView中。然而,“onFailure”返回消息“预期BEGIN_ARRAY但BEGIN_OBJECT第1行第2列路径$”。 我看过类似的问题,但似乎无法在我的应用程序中找到答案。 在OnCread中,我设置了endpoint的基本URL,然后添加了我的API密钥,并调用了一个接口,该接口查询必要的参数: 下面是查询的界
我是android编程新手。我有一个类,在这个类中,修改API调用是为了解析和显示JSON文件中的几个属性。但我得到: Java语言lang.IllegalStateException:应为BEGIN\u对象,但在第2行第1列为字符串 好心帮忙。我搜索了答案,但没有发现JSON响应有任何问题。发布了我的JSON响应和JAVA类: JSON响应: JAVA文件: 模型类: