Как правильно парсить JSON файл и получить "polyline" и "points"?

Как правильно это сделать? Я пробую, но пока мне выводит только первый результат. Мне нужно отпаристь множество polyline & points, но мой код выводит только один результат, который первый в списке JSON, а именно "points" : "{kd_IljoJ" и на этом останавливается. Что не так делаю?

 public void parseDirect(String response) {

    PolylineOptions polylineOptions = new PolylineOptions();
    List<LatLng> movements = new ArrayList<>();
    try{
        JSONObject json = new JSONObject(response);
        //Retrieve routes from response
        JSONObject jsonRoute = json.getJSONArray("routes").getJSONObject(0);
        //Retrieve legs from routes
        JSONObject legs = jsonRoute.getJSONArray("legs").getJSONObject(0);
        //Retrieve steps from legs
        JSONArray steps = legs.getJSONArray("steps");
        final int numSteps = steps.length();
        JSONObject step;
        //Retrieve points from steps
        for (int i = 0; i < numSteps; i++) {
            step = steps.getJSONObject(i);
            String pontos = step.getJSONObject("polyline").getString("points");
            movements.addAll(PolyUtil.decode(pontos));
        }

        polylineOptions.color(Color.RED);
        polylineOptions.width(10);
        polylineOptions.addAll(movements);

        mMap.clear();
        mMap.addPolyline(polylineOptions);
        Log.i("parser", "parseDirect: " + movements.toString());
    }catch(Exception ex){
        Log.d("DirectionErr",ex.getMessage());
    }

    //make use of movements object here
}

Вот и ссылочка на сам JSON и кусочек кода. Обьясните пожалуйста, что не так?

"routes" : [
  {
     "bounds" : {
        "northeast" : {
           "lat" : 52.476859,
           "lng" : -1.8391689
        },
        "southwest" : {
           "lat" : 52.4336032,
           "lng" : -1.9356315
        }
     },
     "copyrights" : "Map data ©2020",
     "legs" : [
        {
           "distance" : {
              "text" : "1 m",
              "value" : 0
           },
           "duration" : {
              "text" : "1 min",
              "value" : 0
           },
           "end_address" : "537 Moseley Rd, Balsall Heath, Birmingham B12 9BU, UK",
           "end_location" : {
              "lat" : 52.4564595,
              "lng" : -1.8859882
           },
           "start_address" : "537 Moseley Rd, Balsall Heath, Birmingham B12 9BU, UK",
           "start_location" : {
              "lat" : 52.4564595,
              "lng" : -1.8859882
           },
           "steps" : [
              {
                 "distance" : {
                    "text" : "1 m",
                    "value" : 0
                 },
                 "duration" : {
                    "text" : "1 min",
                    "value" : 0
                 },
                 "end_location" : {
                    "lat" : 52.4564595,
                    "lng" : -1.8859882
                 },
                 "html_instructions" : "Head on \u003cb\u003eMoseley Rd\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eA435\u003c/b\u003e",
                 "polyline" : {
                    "points" : "{kd_IljoJ"
                 },
                 "start_location" : {
                    "lat" : 52.4564595,
                    "lng" : -1.8859882
                 },
                 "travel_mode" : "DRIVING"
              }
           ],
           "traffic_speed_entry" : [],
           "via_waypoint" : []
        },
        {
           "distance" : {
              "text" : "1.2 km",
              "value" : 1234
           },
           "duration" : {
              "text" : "4 mins",
              "value" : 224
           },
           "end_address" : "2a Church Rd, Balsall Heath, Birmingham B13 9AG, UK",
           "end_location" : {
              "lat" : 52.4516491,
              "lng" : -1.8789525
           },
           "start_address" : "537 Moseley Rd, Balsall Heath, Birmingham B12 9BU, UK",
           "start_location" : {
              "lat" : 52.4564595,
              "lng" : -1.8859882
           },
           "steps" : [
              {
                 "distance" : {
                    "text" : "0.2 km",
                    "value" : 152
                 },
                 "duration" : {
                    "text" : "1 min",
                    "value" : 35
                 },
                 "end_location" : {
                    "lat" : 52.4551279,
                    "lng" : -1.8864839
                 },
                 "html_instructions" : "Head \u003cb\u003esouth\u003c/b\u003e on \u003cb\u003eMoseley Rd\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eA435\u003c/b\u003e towards \u003cb\u003eHomer St\u003c/b\u003e",
                 "polyline" : {
                    "points" : "{kd_IljoJd@L|Ab@pA\\r@P"
                 },
                 "start_location" : {
                    "lat" : 52.4564595,
                    "lng" : -1.8859882
                 },
                 "travel_mode" : "DRIVING"
              },

JSON файл


Ответы (1 шт):

Автор решения: Andrew

В вашем методе эта строка кода:

JSONObject jsonRoute = json.getJSONArray("routes").getJSONObject(0);

получает самый первый объект массива routes. Для того чтобы обработать все элементы массива, сначала берите в другую переменную массив из json так как вы уже делаете:

JSONArray jArray = json.getJSONArray("routes");

теперь у вас есть массив объектов. Дальше вы в цикле проходите по этому массиву и собираете то что вам нужно:

for (int i = 0; i < jArray.size; i++) {

}

и дальше весь ваш код для получения объектов нужно выполнять внутри массива, то есть строка jsonRoute можно будет получить так:

for (int i = 0; i < jArray.size; i++) {
    jsonRoute = jArray.getJSONObject(i);
}

теперь у вас будет то кол-во объектов jsonRoute которое в приходящем массиве а не только один.

→ Ссылка