JsonSyntaxException - 预期BEGIN_OBJECT但是BEGIN_ARRAY

时间:2017-05-17 02:19:55

标签: java android json gson android-volley

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

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

主要目标是使用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

1 个答案:

答案 0 :(得分:2)

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

将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;
}