You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在org.json中如何无需编写has判断代码,安全调用getString()、getBoolean()

解决org.json中避免重复编写has判断的方法

方法一:使用org.json自带的opt系列方法

org.json的JSONObject本身提供了optString()、optBoolean()这类方法,它们会在键不存在、值为null或者类型不匹配时返回默认值(或内置默认值),不会抛出JSONException,直接替代先has()再get()的冗余写法:

  • optString(String key):键不存在/值为null时返回空字符串"";值存在时尝试转为字符串返回
  • optString(String key, String defaultValue):键不存在/值无效时返回你指定的默认值
  • optBoolean(String key):键不存在/值为null时返回false;值存在时尝试转为布尔值返回
  • optBoolean(String key, boolean defaultValue):键不存在/值无效时返回你指定的默认值

示例代码:

import org.json.JSONObject;

public class Example {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "Alice");
        
        // 键存在时返回对应值,不存在时返回空串
        String username = jsonObject.optString("name"); // 输出 "Alice"
        String email = jsonObject.optString("email"); // 输出 ""
        
        // 带自定义默认值的用法
        String phone = jsonObject.optString("phone", "123-456-7890"); // 输出 "123-456-7890"
        
        // 布尔类型的opt方法
        boolean isAdmin = jsonObject.optBoolean("is_admin"); // 输出 false
        boolean isActive = jsonObject.optBoolean("is_active", true); // 输出 true
    }
}

方法二:自定义工具类封装安全获取逻辑

如果需要更灵活的控制(比如统一处理类型转换异常、自定义空值逻辑),可以封装一个工具类,把has()判断和异常捕获逻辑统一放在里面,彻底避免重复代码:

import org.json.JSONObject;
import org.json.JSONException;

public class JsonSafeUtils {
    // 安全获取字符串,支持自定义默认值
    public static String getString(JSONObject json, String key, String defaultValue) {
        if (json == null || !json.has(key)) {
            return defaultValue;
        }
        try {
            String value = json.getString(key);
            // 可选:额外处理空字符串的情况
            return value.isEmpty() ? defaultValue : value;
        } catch (JSONException e) {
            // 捕获类型转换异常,返回默认值
            return defaultValue;
        }
    }

    // 安全获取布尔值,支持自定义默认值
    public static boolean getBoolean(JSONObject json, String key, boolean defaultValue) {
        if (json == null || !json.has(key)) {
            return defaultValue;
        }
        try {
            return json.getBoolean(key);
        } catch (JSONException e) {
            return defaultValue;
        }
    }

    // 可扩展其他类型:getInt、getLong等
}

使用示例:

String username = JsonSafeUtils.getString(jsonObject, "username", "guest");
boolean isVerified = JsonSafeUtils.getBoolean(jsonObject, "is_verified", false);

这个工具类的优势在于可以根据业务需求调整逻辑,比如如果键存在但值是空字符串,也返回默认值;或者对类型转换失败的情况做统一日志记录等。

内容的提问来源于stack exchange,提问作者soniya s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:43:00