2016-08-08 3 views
1

У меня есть следующий JSON ответ:Как получить доступ к глубокому элементу JSON в Java

{ 
    "destination_addresses" : [ "Berlin, Deutschland" ], 
    "origin_addresses" : [ "Mannheim, Deutschland" ], 
    "rows" : [ 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "624 km", 
        "value" : 624195 
       }, 
       "duration" : { 
        "text" : "5 Stunden, 53 Minuten", 
        "value" : 21156 
       }, 
       "status" : "OK" 
      } 
     ] 
     } 
    ], 
    "status" : "OK" 
} 

Мой вопрос: Как я могу получить доступ к «тексту» Element в разделе «расстояние»?

Я следующий прямо сейчас:

JSONObject object = (JSONObject) new JSONTokener(response).nextValue(); 
JSONArray rows= null; 
rows= object.getJSONArray("rows"); 
+2

который JSon парсер вы используете? Apache? Android? Просто? –

+0

Im using Android – farahm

ответ

2

Вы должны либо продолжить разбор JSONArray, например:

for(int i = 0; i < rows.length; i++) { 
    JSONArray elements = rows.getJSONArray(i); 
    for(int j = 0; j < elements.length; j++) { 
     JSONObject current = elements.getJSONObject(j); 
     String curText = current.getJSONObject("distance").getJSONObject("text"); 
    }  
} 

Или вы можете представить свой JSon в POJO и десериализации его с помощью Джексона Например, ObjectMapper.

+0

Я получаю сообщение об ошибке: org.json.JSONException: Value {"elements": [{"distance": {"text": "624 km", "value": 624195}, "duration": { «текст»: «5 часов 53 минуты», «значение»: 21156}, «статус»: «ОК»}]} в 0 типа org.json.JSONObject не может быть преобразован в JSONArray – farahm

+1

В вашем примере вы изображали элементы как массив. Исключение указывает, что это JSONObject. Используйте это вместо этого. –

0

я не уверен, но вы можете попробовать что-то вроде этого

JSONArray rows = object.getJSONArray("rows"); 
     for (int i = 0; i < jsonObjInput.length(); i++) { 
     JSONObject tmp = jsonObjInput.getJSONObject(i); 
     } 

Клеман

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