Android JSON Parse: JSONObject內又包了一個JSONObject

在Android中,當我們所需要的資料欄位位於JSON格式物件中的物件時,該怎麼取得我們要的欄位資料呢?

這邊使用公共運輸整合資訊流通服務平台提供的API所取得的台鐵站別片段JSON資料來做為範例:

[
  {
    "StationID": "1001",
    "StationName": {
      "Zh_tw": "基隆",
      "En": "Keelung"
    },
    "StationPosition": {
      "PositionLat": 25.132483,
      "PositionLon": 121.739134
    },
    "StationAddress": "基隆市仁愛區文昌里港西街5號",
    "StationPhone": "02-24263743",
    "OperatorID": "TRA",
    "StationClass": 1
  },
  {
    "StationID": "1002",
    "StationName": {
      "Zh_tw": "八堵",
      "En": "Badu"
    },
    "StationPosition": {
      "PositionLat": 25.108392,
      "PositionLon": 121.729049
    },
    "StationAddress": "基隆市暖暖區八南里八堵路142號",
    "StationPhone": "02-24560841",
    "OperatorID": "TRA",
    "StationClass": 2
  }
]

我們的目標是要取得各站的中文名稱,也就是"Zh_tw"欄位的資料,而這筆資料位於物件裡面的物件之中,其作法如下:

ArrayList<String> TRAStation = new ArrayList<>();

JSONArray resultArr = new JSONArray(finalJsonStr);// finalJsonStr為整個Json格式資料的String

for (int i = 0; i < resultArr.length(); i++) {
    JSONObject parentArr = resultArr.getJSONObject(i);
    String childStr = parentObj.getString("StationName");
    JSONObject childObj = new JSONObject(childStr);
    String StationName = childObj.getString("Zh_tw");
    TRAStation.add(StationName);
}

也可將7~10行結合成一行:
TRAStation.add(new JSONObject(new JSONObject(parentObj.toString()).getString("StationName")).getString("Zh_tw"));



留言

這個網誌中的熱門文章

Android 語音輸入(Speech To Text)

Android JSONArray之排序