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

Android JSON 解析:getString 拋出異常導致後續代碼不執行的解決方案

     編輯:程式設計綜合問答

使用 JSONObject.getString(key) 時,若 Key 不存在或值為 null,會拋出 JSONException,導致後續代碼中斷。需統一異常處理。

問題代碼

String a = json.getString("a");  // 若無 "a" → 拋出異常
String b = json.getString("b");  // 永遠不會執行
String c = json.getString("c");

解決方案:封裝安全獲取方法

public static String optString(JSONObject obj, String key, String defValue) {
    try {
        String val = obj.getString(key);
        return (val == null || val.equals("null")) ? defValue : val;
    } catch (JSONException e) {
        return defValue;
    }
}

// 使用
String a = optString(json, "a", "");
String b = optString(json, "b", "");
String c = optString(json, "c", "");
// 任一缺失均不影響後續執行

替代方案:使用 optString (API 自帶)

String a = json.optString("a", "");  // 不拋異常,Key不存在返回預設值
String b = json.optString("b", "");

注意:optString 若值為 JSON null 會返回字符串 "null",建議再判斷:

String val = json.optString("key", "");
if ("null".equals(val)) val = "";

批量處理模式

String[] keys = {"a","b","c","d"};
Map result = new HashMap<>();
for (String k : keys) {
    result.put(k, optString(json, k, ""));
}
// 後續統一使用 result.get("a") ...

最佳實踐

  1. 優先使用 optXxx 系列方法,避免 try-catch 開銷。
  2. 統一封裝 safeGetString 處理 "null" 字符串。
  3. 關鍵業務字段 必須 存在時,顯式檢查 has(key) 並拋出業務異常。

採用安全獲取模式,確保 JSON 解析健壯不中斷。

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