首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android JSON解析實戰:從電影列表數據到ListView展示

     編輯:程式設計綜合問答

正確解析嵌套JSON數組的完整流程

在Android開發中,從網絡獲取的JSON數據往往包含嵌套結構。本文通過一個電影列表的實例,演示如何正確使用JSONObject和JSONArray解析數據,並解決「Log無輸出」的常見問題。

原始JSON數據結構

{
  "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();
}

進階:封裝為實體類並適配ListView

  1. 定義Movie實體類,包含所有字段及Getter/Setter。
  2. 解析循環中創建Movie對象,加入List<Movie>。
  3. 自定義BaseAdapter,在getView()中綁定數據到佈局(含圖片異步加載)。
  4. 設置ListView.setAdapter()。

常用第三方庫推薦

  • Gson:new Gson().fromJson(retSrc, MovieResponse.class) 一行代碼完成映射。
  • Moshi:Square出品,支持Kotlin,性能優異。
  • Fastjson:阿里巴巴開源,解析速度極快。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved