2013-05-28 9 views
0

Я разбираю некоторые JSON, у которых есть массивы внутри массивов, и я просто не могу получить данные массивов в первом массиве.Вложенные массивы JSON

Моя JSON выглядит следующим образом (я вырезал его в конце концов, так что это было не так давно):

{"TrackingInformationResponse": { 
"shipments": [ 
{ 
    "shipmentId": "03015035146308", 
    "uri": "\/ntt-service-rest\/api\/shipment\/03015035146308\/0", 
    "assessedNumberOfItems": 1, 
    "deliveryDate": "2013-05-13T11:47:00", 
    "estimatedTimeOfArrival": "2013-05-13T16:00:00", 
    "service": { 
    "code": "88", 
    "name": "DPD" 
    }, 
    "consignor": { 
    "name": "Webhallen Danmark ApS", 
    "address": { 
     "street1": "Elsa Brändströms Gata 52", 
     "city": "HÄGERSTEN", 
     "countryCode": "SWE", 
     "country": "Sverige", 
     "postCode": "12952" 
    } 
    }, 
    "consignee": { 
    "name": "Lene Bjerre Kontor & IT Service", 
    "address": { 
     "street1": "Lene Bjerre", 
     "street2": "Ørbækvej 8, Hoven", 
     "city": "TARM", 
     "countryCode": "???", 
     "postCode": "6880" 
    } 
    }, 
    "statusText": { 
    "header": "Forsendelsen er udleveret", 
    "body": "Forsendelsen blev leveret 13-05-2013 kl. 11:47" 
    }, 
    "status": "DELIVERED", 
    "totalWeight": { 
    "value": "0.55", 
    "unit": "kg" 
    }, 
    "totalVolume": { 
    "value": "0.005", 
    "unit": "m3" 
    }, 
    "items": [ 
    { 
     "itemId": "03015035146308", 
     "dropOffDate": "2013-05-08T17:18:00", 
     "deliveryDate": "2013-05-13T11:47:00", 
     "status": "DELIVERED", 
     "statusText": { 
     "header": "Forsendelsen er udleveret til modtageren", 
     "body": "Forsendelsen blev udleveret 13-05-2013 kl. 11:47" 
     }, 

я могу получить содержание «поставки» массив просто отлично, но у меня есть не знаю, как получить содержимое массива «items». Мой код выглядит следующим образом:

try { 
      JSONObject jsonObject = new JSONObject(result); 
      JSONObject TrackingInformationResponse = new JSONObject(jsonObject.getString("TrackingInformationResponse")); 
      JSONArray shipments = new JSONArray(TrackingInformationResponse.getString("shipments")); 

      for (int i = 0; i < shipments.length(); i++) { 
       JSONObject JSONitems = shipments.getJSONObject(i);   
       String shipmentId = JSONitems.getString("shipmentId"); 

       //do stuff 
      } 
     } catch (Exception e) { 
      Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage()); 
     } 

Как бы я сделать то же самое с массивом «элементы», как я сделал с массивом «отгрузок»?

+0

JSON не завершен! –

ответ

1

Вы должны получить массив items из массива Shipment, как и вы, а затем перебираете его, как вы делали поставки.

Это может выглядеть примерно так:

JSONObject jsonObject = new JSONObject(result); 
      JSONObject TrackingInformationResponse = new JSONObject(jsonObject.getString("TrackingInformationResponse")); 
      JSONArray shipments = new JSONArray(TrackingInformationResponse.getString("shipments")); 

      for (int i = 0; i < shipments.length(); i++) { 
       JSONObject JSONitems = shipments.getJSONObject(i);   
       String shipmentId = JSONitems.getString("shipmentId"); 
       JSONArray items = new JSONArray(JSONitems.getString("items"); 
       //get items stuff 
       //do stuff 
      } 

     } catch (Exception e) { 
      Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage()); 
     } 
+0

Спасибо, это работает отлично. Но нет ли другого способа сделать это? У меня много вложенных массивов, и если мне нужно сделать for-loop для каждого, это становится довольно грязным. – Lazze

+0

Вы можете поместить JSON в «hashmap» и перебрать «hashmap» с помощью цикла while; но вам все равно придется перебирать набор, чтобы получить все значения из каждого объекта массива. Вы также можете создать рекурсивную функцию, чтобы вытащить вложенные массивы, но, опять же, вам все равно придется перебирать массив. – BlackHatSamurai

0

items является массив JSON расположен внутриshipments массив, так что вам нужно, чтобы получить items массив в shipments, может быть, как это:

 for (int i = 0; i < shipments.length(); i++) { 
      JSONObject JSONitems = shipments.getJSONObject(i);   
      String shipmentId = JSONitems.getString("shipmentId"); 
      JSONArray items = new JSONArray(JSONitems.getString("items")); 
      //iterate over items 
     } 

Надеюсь, это поможет, удачи

0

T ry thellow код:

JSONObject jObject = new JSONObject(yourJSONString); 
JSONObject trackInfo = jObject.getJSONObject("TrackingInformationResponse"); 
JSONArray shipMents = trackInfo.getJSONArray("shipments"); 
JSONArray items = shipMents.getJSONArray("items"); 
Смежные вопросы