使用 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", "");
// 任一缺失均不影響後續執行
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") ...
optXxx 系列方法,避免 try-catch 開銷。safeGetString 處理 "null" 字符串。has(key) 並拋出業務異常。採用安全獲取模式,確保 JSON 解析健壯不中斷。