2016-10-11 5 views
0

Я хочу получить данные от этого, но его до путаницы, как это сделать. Я хочу получить доступ к ногам. В ногах расстояние, затем текст. Затем после шагов, шаг за шагом, расстояние, а затем текст.Получите несколько объектов от Json Android

В "Маршруты" ==> "ноги" -> расстояние -> Текст

Затем, чтобы управлять шаги "маршруты" ==> "ноги" ==> "шаги" -> расстояние -> текст

Сначала есть объект, затем массив снова объект его слишком запутанным. Любая помощь будет оценена по достоинству.

{ 
     "geocoded_waypoints" : [ 
      { 
      "geocoder_status" : "OK", 
      "place_id" : "ChIJ2QeB5YMEGTkRYiR-zGy-OsI", 
      "types" : [ "locality", "political" ] 
      }, 
      { 
      "geocoder_status" : "OK", 
      "place_id" : "ChIJ2afeeFcxOzkRL9RVTscv17o", 
      "types" : [ "locality", "political" ] 
      } 
     ], 
     "routes" : [ 
      { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 31.55462439999999, 
        "lng" : 74.3571711 
       }, 
       "southwest" : { 
        "lat" : 30.1981178, 
        "lng" : 71.4687352 
       } 
      }, 
      "copyrights" : "Map data ©2016 Google", 
      "legs" : [ 
       { 
        "distance" : { 
         "text" : "348 km", 
         "value" : 347978 
        }, 
        "duration" : { 
         "text" : "4 hours 49 mins", 
         "value" : 17335 
        }, 
        "end_address" : "Multan, Pakistan", 
        "end_location" : { 
         "lat" : 30.1981178, 
         "lng" : 71.4687352 
        }, 
        "start_address" : "Lahore, Pakistan", 
        "start_location" : { 
         "lat" : 31.55462439999999, 
         "lng" : 74.3571711 
        }, 
        "steps" : [ 
         { 
         "distance" : { 
          "text" : "67 m", 
          "value" : 67 
         }, 
         "duration" : { 
          "text" : "1 min", 
          "value" : 9 
         }, 
         "end_location" : { 
          "lat" : 31.5549532, 
          "lng" : 74.3565735 
         }, 
         "html_instructions" : "Head \u003cb\u003enorthwest\u003c/b\u003e on \u003cb\u003eAllama Iqbal Rd\u003c/b\u003e", 
         "polyline" : { 
          "points" : "k_r_Ei{ydM[[email protected]@bA" 
         }, 
         "start_location" : { 
          "lat" : 31.55462439999999, 
          "lng" : 74.3571711 
         }, 
         "travel_mode" : "DRIVING" 
         }, 
+0

Я использую gson для этого, ничего не беспокоиться о и простой в использовании =) Я могу привести вам пример, если вы хотите. Или попробуй сначала прочитать в нем? –

+0

обратитесь к http://stackoverflow.com/questions/17673057/how-to-parse-this-nested-json-array-in-android – sasikumar

ответ

2

Ручной метод:

В нескольких словах Json дает объекты (beetwen {}) или массив (beetwen []). Чтобы попасть из глубины в json, вам нужно пройти каждый уровень. Вы положили только фрагмент JSON, но я закрыл его, и мы имеем при запуске объекта JSon (потому что основные брекеты {}):

{ 
    "geocoded_waypoints" : [ 
     { 
     "geocoder_status" : "OK", 
     "place_id" : "ChIJ2QeB5YMEGTkRYiR-zGy-OsI", 
     "types" : [ "locality", "political" ] 
     }, 
     { 
     "geocoder_status" : "OK", 
     "place_id" : "ChIJ2afeeFcxOzkRL9RVTscv17o", 
     "types" : [ "locality", "political" ] 
     } 
    ], 
    "routes" : [ 
     { 
     "bounds" : { 
      "northeast" : { 
       "lat" : 31.55462439999999, 
       "lng" : 74.3571711 
      }, 
      "southwest" : { 
       "lat" : 30.1981178, 
       "lng" : 71.4687352 
      } 
     }, 
     "copyrights" : "Map data ©2016 Google", 
     "legs" : [ 
      { 
       "distance" : { 
        "text" : "348 km", 
        "value" : 347978 
       }, 
       "duration" : { 
        "text" : "4 hours 49 mins", 
        "value" : 17335 
       }, 
       "end_address" : "Multan, Pakistan", 
       "end_location" : { 
        "lat" : 30.1981178, 
        "lng" : 71.4687352 
       }, 
       "start_address" : "Lahore, Pakistan", 
       "start_location" : { 
        "lat" : 31.55462439999999, 
        "lng" : 74.3571711 
       }, 
       "steps" : [ 
        { 
        "distance" : { 
         "text" : "67 m", 
         "value" : 67 
        }, 
        "duration" : { 
         "text" : "1 min", 
         "value" : 9 
        }, 
        "end_location" : { 
         "lat" : 31.5549532, 
         "lng" : 74.3565735 
        }, 
        "html_instructions" : "Head \u003cb\u003enorthwest\u003c/b\u003e on \u003cb\u003eAllama Iqbal Rd\u003c/b\u003e", 
        "polyline" : { 
         "points" : "k_r_Ei{ydM[[email protected]@bA" 
        }, 
        "start_location" : { 
         "lat" : 31.55462439999999, 
         "lng" : 74.3571711 
        }, 
        "travel_mode" : "DRIVING" 
        }] 
      } 
      ] 
     } 
    ] 

}

Допустим, у вас есть это как строку с именем «jsonString ». Вы создаете объект JSON как это:

JSONObject jsonObject = new JSONObject(jsonString); 

Чем вы нужны "маршруты", то есть массив JSON (между [] скобки). Вы можете создать этот массив все глубже в основную JSONObject:

JSONArray routesArray = jsonObject.getJSONArray("routes"); 

пройти через каждый элемент массива (то есть JSON объекты) вы итерация, как это:

for (int i = 0; i < routesArray.length(); i++) { 
    //do sth 
} 

И вы получите свою «ногу», как это:

JSONObject routeObject = routesArray.get(i); 
routeObject.get("legs"); 

И все глубже и глубже, как указано выше.

Автоматически

Это гораздо проще использовать библиотеку Gson и некоторые парсер Json Pojo.

импортирован gson в вашем build.gradle:

compile 'com.google.code.gson:gson:2.4' 

Чем вы можете использовать этот parser. Выберите тип источника «JSON» и «Стиль аннотации» Gson. Поместите ваш json в текстовое поле и нажмите «Предварительный просмотр» или загрузите ZIP. Вы также можете поместить имя своего пакета и имя основного класса или переименовать его вручную позже. Вам будут даны несколько классов моделей с верхним именем «Пример» или ваше имя. Он состоит из двух полей:

public class Example { 
@SerializedName("geocoded_waypoints") 
@Expose 
private List<GeocodedWaypoint> geocodedWaypoints = new ArrayList<GeocodedWaypoint>(); 
@SerializedName("routes") 
@Expose 
private List<Route> routes = new ArrayList<Route>(); 

Добавить все классы в свой проект и чем вы просто разобрать ваш jsonString к главному классу, как это:

Example mainClassObject = new Gson().fromJson(jsonString, Example.class); 

И теперь вы можете получить доступ к маршрутам из этого объекта. И ноги от маршрутов и все глубже и глубже ...

0

Пожалуйста, попробуйте ниже код для синтаксического анализа при условии ключи JSON значение:

private void parseJson(String jsonString){ 
     ArrayList<String> legsDistanceList = new ArrayList<>(); 
     ArrayList<String> legStepsDistanceList = new ArrayList<>(); 
     try{ 
      JSONObject rootJson = new JSONObject(jsonString); 
      if(rootJson.has("routes")) { 
       JSONArray routesJsonArray = rootJson.getJSONArray("routes"); 
       for(int i=0;i<routesJsonArray.length();i++){ 
        JSONObject routeJson = routesJsonArray.getJSONObject(i); 
        if(routeJson.has("legs")){ 
         JSONArray legsJsonArray = routeJson.getJSONArray("legs"); 
         for(int j=0;j<legsJsonArray.length();j++){ 
          JSONObject legJson = legsJsonArray.getJSONObject(j); 
          if(legJson.has("distance")){ 
           JSONObject distanceJson = legJson.getJSONObject("distance"); 
           legsDistanceList.add(distanceJson.getString("text")); 
          } 
          if(legJson.has("steps")){ 
           JSONArray stepsJsonArray = legJson.getJSONArray("steps"); 
           for(int k=0;k<stepsJsonArray.length();k++){ 
            JSONObject stepJson = stepsJsonArray.getJSONObject(k); 
            if(stepJson.has("distance")){ 
             JSONObject stepDistanceJson = stepJson.getJSONObject("distance"); 
             legStepsDistanceList.add(stepDistanceJson.getString("text")); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     }catch (Throwable e){ 
      e.printStackTrace(); 
     } 

     Log.i("Legs Distance ",legsDistanceList.toString()); 
     Log.i("Legs Steps Distance ",legStepsDistanceList.toString()); 
    } 

Я думаю, что выше код может быть трудно для вас, чтобы понять, на данном этапе, но как только вы понимаете, то это будет более полезным для вас в будущем JSON синтаксический анализ.

+0

Это действительно помогло, и вы сделали код довольно простым, спасибо. – Mamoon

0

вы можете сторонних лиц (Gson, Logan Square и т. Д.) Для разбора. Если вы пытаетесь получить к нему доступ напрямую. Ниже вы можете найти пример кода для доступа к массиву «ноги».

Допустит

JsonObject jsonObject = new JsonObject("json string"); 

это «JSONObject» является полным значением JSon, от которого вы хотите получить доступ к «ноге» массиву. В этом случае массив «ноги» находится внутри массива «маршруты». Таким образом, нам нужно сначала получить массив «маршрутов» и создать цикл этого массива и получить массив «ног» от каждого объекта и сохранить в классе POJO, или если вы хотите получить «текст» отдельно от «расстояния», значит, вы можете хранить что в аррайисте или струне, которая вам нужна. Ниже приведен пример кода для получения текста.

JsonArray routesArray = jsonObject.optJsonArray("routes"); 
     if (routesArray != null) { 
      for (int i = 0; i < routesArray.length(); i++) { 
       JsonArray legsArray = routesArray.get(i).optJsonArray("legs"); 
       if (legsArray != null) { 
        for (int i = 0; i < legsArray.length(); i++) { 
         JsonObject legObject = legsArray.get(i); 
         JsonObject distanceObject = legObject.optJsonObject("distance"); 
         String textValue = distanceObject.optString("text"); 
        } 
       } 
      } 
     } 

Надежда это полезно :)

Смежные вопросы