我正在尝试使用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();
这段代码的目的是获取该输出并将其解析为最终的字符串,即持续时间,这是由该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");
我在第二个块的第二行捕获了一个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");
但是它仍然抛出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 },
“ routes”是一个数组,而不是using getJSONObject,使用getJSONArray
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");