在Android開發中,從網絡獲取的JSON數據往往包含嵌套結構。本文通過一個電影列表的實例,演示如何正確使用JSONObject和JSONArray解析數據,並解決「Log無輸出」的常見問題。
{
"movies": [
{
"movieId": "fmen71229238",
"eTitle": "Mission: Impossible - Ghost Protocol",
"cTitle": "不可能的任務:鬼影行動",
"imageUrl": "https://...",
"releaseDate": "2011/12/15",
"saleType": "0"
},
...
]
}
// 錯誤:直接將整個JSON字符串當作JSONArray解析
JSONArray result = new JSONArray(retSrc);
for (int i = 0; i < result.length(); i++) {
JSONObject stock_data = result.getJSONObject(i);
Log.i("bird", "eTitle:" + stock_data.getString("eTitle")); // 無輸出
}
錯誤原因:頂層是JSONObject(包含"movies"鍵),而非JSONArray。直接用new JSONArray(retSrc)會拋出異常或得到空結果。
try {
// 1. 先解析頂層JSONObject
JSONObject jObj = new JSONObject(retSrc);
// 2. 獲取鍵"movies"對應的JSONArray
JSONArray jArr = jObj.getJSONArray("movies");
// 3. 遍歷數組提取每部電影信息
for (int i = 0; i < jArr.length(); i++) {
JSONObject movie = jArr.getJSONObject(i);
String eTitle = movie.getString("eTitle");
String cTitle = movie.getString("cTitle");
// ... 其他字段
Log.i("bird", "eTitle: " + eTitle);
}
} catch (JSONException e) {
e.printStackTrace();
}
Movie實體類,包含所有字段及Getter/Setter。Movie對象,加入List<Movie>。BaseAdapter,在getView()中綁定數據到佈局(含圖片異步加載)。ListView.setAdapter()。new Gson().fromJson(retSrc, MovieResponse.class) 一行代碼完成映射。