2017-09-16 63 views
0

我想解析JSON数组内的嵌套JSON对象。我不知道如何以通用的方式访问嵌套的JSON对象中的所有对象和键和值。JSON数组内嵌JSON对象

 { 
     "flights": [ 
     { 
      "ident": "AWI4207", 
      "faFlightID": "AWI4207-1505297520-schedule-0000", 
      "origin": { 
       "code": "KORF", 
       "city": "Norfolk, VA", 
       "alternate_ident": "", 
       "airport_name": "Norfolk Intl" 
      }, 
      "destination": { 
       "code": "KPHL", 
       "city": "Philadelphia, PA", 
       "alternate_ident": "", 
       "airport_name": "Philadelphia Intl" 
      }, 
      "filed_ete": 2400, 
      "filed_departure_time": { 
       "epoch": 1505470320, 
       "tz": "EDT", 
       "dow": "Friday", 
       "time": "06:12AM", 
       "date": "15/09/2017", 
       "localtime": 1505455920 
      }, 
     } 
     ] 
    } 

这是我迄今为止所做的。

JSONParser parser = new JSONParser(); 
JSONObject object = (JSONObject) parser.parse(new FileReader("PathToFile.json")); 

JSONArray jsonArray = (JSONArray) object.get("flights"); 
Iterator<Object> eventJSONIterator = jsonArray.iterator(); 

while (eventJSONIterator.hasNext()) { 
    JSONObject jsonEvent = (JSONObject) eventJSONIterator.next(); 
    System.out.println(jsonEvent.toString()); 
} 

我可以访问对象,但不能单独访问子对象。有没有办法遍历“flights”数组中的对象,并知道如果我再次遇到JSON对象(例如“origin”)并在其中循环?而不是做以下

JSONObject mainObject = (JSONObject) jsonArray.get(0); 

JSONObject origin = (JSONObject) mainObject.get("origin"); 
JSONObject destination = (JSONObject) mainObject.get("destination"); 
JSONObject filed_departure_time = (JSONObject) mainObject.get("filed_departure_time"); 

而且,我想访问键作为ORIGIN_CODE,ORIGIN_CITY和DESTINATION_CODE,DESTINATION_CITY等,以便知道哪个对象它属于。

+0

我想这是Java。请标记你的问题。 – trincot

回答

1

你可以做到这一点

JSONParser parser = new JSONParser(); 
    JSONObject object = (JSONObject) parser.parse(new FileReader("PathToFile.json")); 

    JSONArray jsonArray = (JSONArray) object.get("flights"); 
    for(int i=0;i<jsonArray.size();i++){ 
     JSONObject flightJSON = jsonArray.getJSONObject(i); 
     JSONObject origin = flightJSON.getJSONObject("origin"); 
     String code = origin.get("code"); 
     String city = origin.get("city"); 
     String alternate_ident = origin.get("alternate_ident"); 
     String airport_name = origin.get("airport_name"); 
     //Similaryly for these 
     JSONObject destination = flightJSON.getJSONObject("destination"); 
     JSONObject filed_departure_time = flightJSON.getJSONObject("filed_departure_time"); 


    } 

你需要知道的结构解析,但如果你不知道它是否是数组,对象或其他实体,你可以尝试

Object object = json.get("key"); 
    if (object instanceof JSONArray) { 
    // JSONObject 
    jsonArray = (JSONArray)object; 
    }else if (object instanceof JSONObject) { 
    // JSONArray 
    jsonObject = (JSONObject)object; 
    }else { 
    // String or Integer etc. 
} 
+0

for循环中的jsonArray.length()显示出于某种原因的错误。 “方法length()对于JSONArray类型是未定义的” – Alohamora153

+0

是否为JSONArray导入了org.json.JSONArray? –

+1

查看更新的答案jsonArray.size()您的情况 –