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 - 如果我的 bean 被声明为 @ApplicationScoped ,但它有一个公共(public)字段,会发生什么?

java - 当出现异常时 Spring @Trasactional 不会回滚

android - 是否有一种直接的方法来响应用户单击通知来停止服务?

java - 如何在android中的另一个按钮中启用基于onclick的按钮?

ios - dispacth_sync与dispatch_async:iOS JSON解析

javascript - 为搜索到的键/值对返回 bool 值的最简单方法 (Javascript)

java - 我对 Web 应用程序架构有正确的理解吗? HTML5 前端、Java 后端和 JSON 绑定(bind)

java - jSTL 中的 http 请求属性和参数,带有 servlet

android - 绘制镜像的qlabel

javascript - 如何在 JavaScript 中通过键为变量赋值