Android应用程序中Google地图API的JSONparsing

我正在尝试使用Google地图API获取方向时间。 我希望能够创build一个url,得到JSON响应,然后检查这个响应的旅行时间。 在创buildJSON对象之后,我无法导航它。 对我来说,这表明我搞砸了获取响应或浏览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(); 

这段代码的目的是把这个输出parsing成最终的string,持续时间,就像这个类似的问题的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"); 

我在第二个块的第二行捕获了一个JSONexception。 谁能帮助解决这个问题吗? 或者,也许build议一个更简单的方法来获得相同的数据?

编辑:多亏了第一个有用的答案(从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"); 

但它仍然抛出一个JSONexception,只是现在它在第三行之后。 我敢肯定,这是很容易解决,但我真的很感激一些帮助。

示例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 }, 

Solutions Collecting From Web of "Android应用程序中Google地图API的JSONparsing"

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

“腿”也是一个arrays。

 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"); 

我也试图在Android中使用Google的方向API。 所以我做了一个开源项目来帮助做到这一点。 你可以在这里find它: https : //github.com/MathiasSeguy-Android2EE/GDirectionsApiUtils

它如何工作,简单地说:

 public class MainActivity extends ActionBarActivity implements DCACallBack{ /** * Get the Google Direction between mDevice location and the touched location using the Walk * @param point */ private void getDirections(LatLng point) { GDirectionsApiUtils.getDirection(this, startPoint, endPoint, GDirectionsApiUtils.MODE_WALKING); } /* * The callback * When the directions is built from the google server and parsed, this method is called and give you the expected direction */ @Override public void onDirectionLoaded(List<GDirection> directions) { // Display the direction or use the DirectionsApiUtils for(GDirection direction:directions) { Log.e("MainActivity", "onDirectionLoaded : Draw GDirections Called with path " + directions); GDirectionsApiUtils.drawGDirection(direction, mMap); } }