如何使用多个对象和数组从JSON获取数据

时间:2017-09-26 07:19:45

标签: java android arrays json

我是编程新手,我想构建一个从谷歌地图方向获取数据的应用程序,第一个用户需要在列表视图中获取可用的路径。

我的JSON数据就是这个

{
  geocoded_waypoints: [],
  routes: [
    {
      bounds: {

  },
  copyrights: "Map data ©2017 Google",
  legs: [
    {
      arrival_time: {},
      departure_time: {},
      distance: {},
      duration: {
        text: "25 mins",
        value: 1514
      },
      end_address: "destination address, Croatia",
      end_location: {},
      start_address: "start address",
      start_location: {},
      steps: [
        {
          distance: {},
          duration: {},
          end_location: {},
          html_instructions: "Walk to Vjesnik",
          polyline: {},
          start_location: {},
          steps: [],
          travel_mode: "WALKING"
        },
        {
          distance: {},
          duration: {},
          end_location: {},
          html_instructions: "Tram towards Dubec",
          polyline: {},
          start_location: {},
          transit_details: {
            arrival_stop: {},
            arrival_time: {},
            departure_stop: {},
            departure_time: {},
            headsign: "Dubec",
            line: {
              agencies: [
                {
                  name: "Zagrebački Električni Tramvaj",
                  phone: "011 385 60 100 001",
                  url: "http://www.zet.hr/"
                }
              ],
              color: "#ffffff",
              name: "Savski most - Dubec",
              short_name: "4",
              text_color: "#400000",
              vehicle: {}
            },
            num_stops: 9
          },
          travel_mode: "TRANSIT"
        },

这是数组中的第一个路径,

我确实找到了一些代码但是我没有剪切这是正确的,我需要去

duration: {
text: "25 mins",
value: 1514
},
  • 这是在leg数组

然后在步骤数组中,我需要对象transit_details女巫有2个对象行和num_stops,而在对象行中,我有对象:name,short_name和数组代理。

我不确定这是否是正确的代码形成我的情况,我已经意识到我需要得到两个数组,父母和孩子。 如果已经问过这个问题,我很抱歉,但是请您指导我如何获取这些数据?

我找到的Java代码是这样的,但我确实修改了它并发表了一些评论:

   public class DirectionsJSONParser {

    /** Receives a JSONObject and returns a list of lists containing latitude and longitude */
    public List<List<HashMap<String,String>>> parse(JSONObject jObject){

        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONObject jSteps = null;

        try {

            jRoutes = jObject.getJSONArray("routes");

            /** Traversing all routes */
            for(int i=0;i<jRoutes.length();i++){
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                List path = new ArrayList<HashMap<String, String>>();


                /** Traversing all legs */
                for(int j=0;j<jLegs.length();j++){
                    jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");
                    jLegs = ((JSONObject)jRoutes.get(j)).getJSONArray("duration"); // --> this is my 

                    /** Traversing all steps */
                    for(int k=0;k<jSteps.length();k++){
                        String polyline = "";
                        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
                        List list = decodePoly(polyline);
                        jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("transit_details"); // this is my
                        jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("line"); // this is my
                        jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("name"); // this is my
                        jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("short_name"); // this is my

                    }
                    routes.add(path);
                }
            }

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

        return routes;
    }

    /**
     * Method to decode polyline points
     * Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
     * */
    private List decodePoly(String encoded) {

        List poly = new ArrayList();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }

        return poly;
    }
}

我没有得到我需要的数据。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用gson之类的JSON-API来解析Java中的JSON数据

答案 1 :(得分:0)

好的我用gson获取数据,但是如何将它们放在列表视图中 我的代码是:

private void extractTransitDetails(TransitDetailsWrapper transitDetailsWrapper) {
    List<Route> routes = transitDetailsWrapper.getRoutes();
    routes.size();
    for (Route route  : routes) {
        List<Leg> legs = route.getLegs();
        route.getOverviewPolyline();
        for (Leg leg  : legs) {
            List<Step> steps = leg.getSteps();
            leg.getDuration(); // vrijeme putovanja
            leg.getDistance(); // udaljenost u km
            for (Step step : steps) {
                TransitDetails transitDetails = step.getTransitDetails();

                if (transitDetails != null) {
                    transitDetails.getLine();
                    if (transitDetails.getLine() != null) {
                        transitDetails.getLine().getShortName();
                        transitDetails.getLine().getName();
                    }
                    transitDetails.getNumStops();
                    transitDetails.getArrivalStop().getName();
                    transitDetails.getDepartureStop().getName();
                    transitDetails.getLine().getAgencies();

                }

                Log.d("test", "majlajs");

            }
        }
    }


}