Android应用程序中的Google Maps API的JSON解析

use*_*403 10 android json google-maps-api-3

我正在尝试使用google maps API来获取方向时间.我希望创建一个url,获取JSON响应,然后检查该行程持续时间的响应.在我创建JSON对象后,我无法导航它.对我而言,这表明我已经搞砸了获取响应或导航JSON对象.如果你能看到我从网络教程中拼凑出来的一些代码,我会很感激.

此代码旨在获取响应.它被try/catch包围,并没有触发任何错误.

      String stringUrl = <URL GOES HERE>;

      URL url = new URL(stringUrl);
      HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
      if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK)
      {
          BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
          String strLine = null;
          while ((strLine = input.readLine()) != null)
          {
              response.append(strLine);
          }
          input.close();
      }
      String jsonOutput = response.toString();
Run Code Online (Sandbox Code Playgroud)

此代码旨在获取该输出并将其解析为最终字符串,持续时间,这受到此类stackoverflow答案的启发,针对类似问题.

        JSONObject jsonObject = new JSONObject(jsonOutput);
        JSONObject routeObject = jsonObject.getJSONObject("routes");
        JSONObject legsObject = routeObject.getJSONObject("legs");
        JSONObject durationObject = legsObject.getJSONObject("duration"); 
        String duration = durationObject.getString("text");
Run Code Online (Sandbox Code Playgroud)

我正在第二个块的第二行捕获JSON异常.有人可以帮忙解决这个问题吗?或者可能建议一种更简单的方法来获取相同的数据?

编辑:感谢这里的第一个有用的答案(来自aromero),后半部分现在看起来像:

    JSONObject jsonObject = new JSONObject(responseText);
    JSONArray routeObject = jsonObject.getJSONArray("routes");
    JSONArray legsObject = routeObject.getJSONArray(2); ***error***
    JSONObject durationObject = legsObject.getJSONObject(1);
        String duration = durationObject.getString("text");
Run Code Online (Sandbox Code Playgroud)

但它仍然抛出一个JSON异常,只是现在它在第三行之后.我确信这很容易解决,但我真的很感激一些帮助.

示例JSON文件的相关部分如下所示:

{
   "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 34.092810,
               "lng" : -118.328860
            },
            "southwest" : {
               "lat" : 33.995590,
               "lng" : -118.446040
            }
         },
         "copyrights" : "Map data ©2011 Google",
         "legs" : [
            {
               "distance" : {
                  "text" : "12.9 mi",
                  "value" : 20807
               },
               "duration" : {
                  "text" : "27 mins",
                  "value" : 1619
               },
Run Code Online (Sandbox Code Playgroud)

aro*_*ero 15

"routes"是一个数组,而不是使用getJSONObject,使用getJSONArray

"腿"也是一个阵列.

JSONObject jsonObject = new JSONObject(responseText);

// routesArray contains ALL routes
JSONArray routesArray = jsonObject.getJSONArray("routes");
// Grab the first route
JSONObject route = routesArray.getJSONObject(0);
// Take all legs from the route
JSONArray legs = route.getJSONArray("legs");
// Grab first leg
JSONObject leg = legs.getJSONObject(0);

JSONObject durationObject = leg.getJSONObject("duration");
String duration = durationObject.getString("text");
Run Code Online (Sandbox Code Playgroud)