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

Android Gson 解析 JSON 為空排查:資料結構與泛型對應指南

     編輯:程式設計綜合問答

常見原因:JSON 結構與 Model 不匹配

原始碼:

Gson gson = new Gson();
Datas d = gson.fromJson(str, Datas.class);

若 d 為 null 或欄位為 null,通常是因為 JSON 根物件結構與 Datas 類別定義不一致。

正確 JSON 範例

{
  "result_code": 0,
  "result": [
    {
      "sex": "男",
      "opendate": "2015-12-02",
      "name": "李飛",
      "type": "",
      "enddate": "2016-12-02"
    }
  ]
}

對應 Model 類別

public class Datas {
    public int result_code;
    public List result; // 必須是 List
    public static class ResultBean {
        public String sex, opendate, name, type, enddate;
    }
}

排查步驟

  1. Log 列印原始 JSON:Log.d("JSON", str); 確認內容完整。
  2. 線上驗證:貼上 JSONLint 檢查語法。
  3. 欄位名稱大小寫:Gson 預設精確匹配,若 JSON 為 openDate 而 Model 為 opendate 需加 @SerializedName("openDate")。
  4. 泛型擦除問題:若解析為 List,需使用 TypeToken:
    Type type = new TypeToken>(){}.getType();
    List list = gson.fromJson(jsonArrayString, type);

最佳實務

  • 使用 @SerializedName 明確映射,避免混淆壓縮導致欄位名變更。
  • 統一使用 GsonBuilder 設定預設值、日期格式、null 處理:
    Gson gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd").create();
  • 單元測試覆蓋解析邏輯,確保後端變更時及時發現。

總結

Gson 解析為空 90% 是 JSON 與 Model 結構不符。對照 JSON 結構逐項檢查 Model 類別、欄位名稱、泛型型別,並善用 @SerializedName 與 TypeToken 即可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved