如何解析 "steps" 从 google 方向 API 到 java (android)

How to parse "steps" from the google directions API to java (android)

我完全是个初学者,尤其是在 JSON 解析方面。

我一直在使用 google 说明 API 制作一个从两个位置绘制路线的基本导航应用程序,这一切都很棒。然而,在尝试了几个小时从 API 解析 "steps" 之后,我仍然无法让它工作。

我用过这个例子https://github.com/hiepxuan2008/GoogleMapDirectionSimple 解析 JSON 以绘制路线。

这是在下面的代码中完成的。 (完整代码在 github "Directionfinder.java")

private void parseJSon(String data) throws JSONException {
    if (data == null)
        return;

    List<Route> routes = new ArrayList<Route>();
    JSONObject jsonData = new JSONObject(data);
    JSONArray jsonRoutes = jsonData.getJSONArray("routes");
    for (int i = 0; i < jsonRoutes.length(); i++) {
        JSONObject jsonRoute = jsonRoutes.getJSONObject(i);
        Route route = new Route();

        JSONObject overview_polylineJson = jsonRoute.getJSONObject("overview_polyline");
        JSONArray jsonLegs = jsonRoute.getJSONArray("legs");
        JSONObject jsonLeg = jsonLegs.getJSONObject(0);
        JSONObject jsonDistance = jsonLeg.getJSONObject("distance");
        JSONObject jsonDuration = jsonLeg.getJSONObject("duration");
        JSONObject jsonEndLocation = jsonLeg.getJSONObject("end_location");
        JSONObject jsonStartLocation = jsonLeg.getJSONObject("start_location");

        route.distance = new Distance(jsonDistance.getString("text"), jsonDistance.getInt("value"));
        route.duration = new Duration(jsonDuration.getString("text"), jsonDuration.getInt("value"));
        route.endAddress = jsonLeg.getString("end_address");
        route.startAddress = jsonLeg.getString("start_address");
        route.startLocation = new LatLng(jsonStartLocation.getDouble("lat"), jsonStartLocation.getDouble("lng"));
        route.endLocation = new LatLng(jsonEndLocation.getDouble("lat"), jsonEndLocation.getDouble("lng"));
        route.points = decodePolyLine(overview_polylineJson.getString("points"));

        routes.add(route);
    }

    listener.onDirectionFinderSuccess(routes);
}

这是 JSON 通常的样子。 http://pastebin.com/czYkBWWU

我需要解析 "maneuver"、"start_location"、"distance"、“start_location 以及给定路线每一步的位置。

解析这个似乎很容易,但我就是不知道怎么解析。

任何帮助将不胜感激!

这是完整的代码。我 运行 它在我的设备中并获得成功的结果。如果您遇到问题,请告诉我。

try {
            List<Route> routes=new ArrayList<Route>();

            JSONObject mainJSON=new JSONObject(jsonJ);
            JSONArray jarray1=mainJSON.getJSONArray("routes");
            JSONObject jobj1=jarray1.getJSONObject(0);
            JSONArray jarray2=jobj1.getJSONArray("legs");
            JSONObject jobj2=jarray2.getJSONObject(0);
            JSONArray stepArray=jobj2.getJSONArray("steps");

            for (int i=0;i<stepArray.length();i++){
                Route route=new Route();

                JSONObject jobj5=stepArray.getJSONObject(i);
                JSONObject disOBJ=jobj5.getJSONObject("distance");
                JSONObject durOBJ=jobj5.getJSONObject("duration");
                JSONObject endOBJ=jobj5.getJSONObject("end_location");
                JSONObject polOBJ=jobj5.getJSONObject("polyline");
                JSONObject startOBJ=jobj5.getJSONObject("start_location");

                route.startAddress=jobj2.getString("start_address");
                route.endAddress=jobj2.getString("end_address");

                if (jobj5.has("maneuver")){
                    route.maneuver=new Maneuver(jobj5.getString("maneuver"));
                }

                route.distance=new Distance(disOBJ.getString("text"),disOBJ.getString("value"));
                route.duration=new Duration(durOBJ.getString("text"),durOBJ.getString("value"));
                route.startLocation=new LatLng(startOBJ.getDouble("lat"),startOBJ.getDouble("lng"));
                route.endLocation=new LatLng(endOBJ.getDouble("lat"),endOBJ.getDouble("lng"));
                route.points=decodePoluLine(polOBJ.getString("points"));

                routes.add(route);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }