Как правильно парсить 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"
},
Ответы (1 шт):
В вашем методе эта строка кода:
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 которое в приходящем массиве а не только один.