如何在Java的org.json包的JSONObject中检查键是否存在?
检查JSONObject中是否存在"error"键的正确做法
用try catch来做这种常规的键存在性判断确实很不规范——异常机制本来是用来处理意外异常情况的,把它当成正常流程控制会拖慢代码性能,还会让代码逻辑变得晦涩,完全没必要。
不同JSON库都提供了原生的判断方法,直接用就行:
1. 原生org.json库
直接调用has(String key)方法,这就是专门用来判断键是否存在的API:
JSONObject jsonObj = ...; // 你的JSONObject实例 if (jsonObj.has("error")) { // 存在"error"键时的处理逻辑 } else { // 不存在时的处理逻辑 }
如果需要区分「键存在但值为null」的情况,可以搭配isNull(String key):
if (jsonObj.has("error") && !jsonObj.isNull("error")) { // 键存在且值不为null的处理逻辑 }
2. Jackson库
如果用Jackson处理JSON,用JsonNode的has()或hasNonNull()方法:
ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(jsonStr); // 仅判断键是否存在 if (jsonNode.has("error")) { // 处理逻辑 } // 判断键存在且值不为null if (jsonNode.hasNonNull("error")) { // 处理逻辑 }
3. Gson库
Gson的JsonObject同样有has()方法,也可以通过get()方法返回值是否为null来判断:
Gson gson = new Gson(); JsonObject jsonObj = gson.fromJson(jsonStr, JsonObject.class); // 直接判断键是否存在 if (jsonObj.has("error")) { // 处理逻辑 } // 更严谨的判断:键存在且值不为JSON null JsonElement errorElement = jsonObj.get("error"); if (errorElement != null && !errorElement.isJsonNull()) { // 处理逻辑 }
这些方法都是各库专门设计的判断逻辑,性能好、代码清晰,完全替代了用try catch做流程控制的糟糕写法。
内容的提问来源于stack exchange,提问作者Nikolai Savulkin
相关产品推荐
相关产品推荐

