2013-05-28 6 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 배열을 발송물 배열 내부에서 가져와야합니다. 그런 다음 발송물을 만든 것처럼 반복합니다. 당신은 어쩌면이처럼 shipmentsitems 배열을 얻을 필요가 있으므로,

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'에 넣고 while 루프를 사용하여 'hashmap'을 반복 할 수 있습니다. 하지만 각 배열 객체에서 모든 값을 가져 오려면 세트를 반복해야합니다. 중첩 된 배열을 끌어내는 재귀 함수를 만들 수도 있지만 배열에 대해 반복해야합니다. – BlackHatSamurai

0

itemsshipments 배열 내부에있는 JSON 배열입니다 :

이 같이 보일 수

 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 벨소리 코드 :

JSONObject jObject = new JSONObject(yourJSONString); 
JSONObject trackInfo = jObject.getJSONObject("TrackingInformationResponse"); 
JSONArray shipMents = trackInfo.getJSONArray("shipments"); 
JSONArray items = shipMents.getJSONArray("items");