java - JsonSyntaxException - 预期为 BEGIN_OBJECT,但实际为 BEGIN_ARRAY

标签 java android json gson android-volley

首先,我知道其他一些用户之前已经问过类似的问题,所以您可能认为这是一个重复的问题,但事实并非如此。

我想创建一个模型类来解析 GoogleMaps-Direction API 响应从 JSON 格式到 java 对象。

主要目标是使用 volley 库创建自定义请求对象,以便我可以使用 Web 服务并将响应自动转换为 Java 对象。

正如您在下面的屏幕截图中看到的,json 响应由三个根元素组成。前两个是数组,至少据我所知,[] 符号用于表示 JSON 中的数组,第三个只是一个字符串值。

enter image description here

因此,在模型类中,我尝试执行以下操作,声明一些属性来表示 JSON 响应中的这些元素。

enter image description here

最后我创建了一个新的 android studio 项目来测试这个应用程序。您还可以看到自定义请求的代码。 enter image description here

但是,当我运行该应用程序时,我总是收到一个异常: enter image description here

我可以理解该消息的含义,但我无法完全理解为什么会发生这种情况。异常消息指向响应中的第 16 行。我尝试使用 JSONArrayJSONObject 类获得相同的结果 enter image description here

最佳答案

问题是,GSON 尝试在 JSON 字符串中查找 geocodedWaypoints 对象,当找到时,它会尝试将其值解析为 JSONArray 的实例。但话又说回来,JSONArray 本身就是一个对象,也需要一个标识符。因此,要使用数组作为值,您应该使用常规数组类型,例如字符串[]

将 GoogleMapsResponse 类更改为:

public class GoogleMapsResponse {
    private GeocodedWaypoint[] geocodedWaypoints;
    private Route[] routes;
    private String status;
}

并为所有其他对象创建类:

public class GeocodedWaypoint {
    private String geocoderStatus;
    private boolean partialMatch;
    private String placeId;
    private String[] types;
}

等等

关于java - JsonSyntaxException - 预期为 BEGIN_OBJECT,但实际为 BEGIN_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014440/

相关文章:

java - PageObjectModel 与 ExcelBased Selenium 框架

java - Eclipse Luna – AutoIndent 不一致

java - GPS应用距离

android - NDK 应用程序相当于 System.nanoTime() 吗?

javascript - 解析带有反斜杠的 JSON - Javascript

javascript - 在 Google Apps 脚本中解析 JSON 时出现未定义错误

java - Modelio 类图隔间

java - Tomcat - maven - 如何将静态页面添加到 WAR 文件?

android - SQLiteDatabase.OpenDatabase 是 Fragment 中的 NullPointerException

java - 使用 Java 使用 GSON 反序列化 JSON 响应