在 Java 中判断一个字符串是否为“空 JSON”,通常需要区分两种情况:一种是字符串本身为空(null 或 “”),另一种是符合 JSON 格式但没有内容({} 或 [])。
根据你使用的 JSON 类库(Jackson, Fastjson, 或 Gson),处理方式略有不同:
1. 使用 Jackson (推荐)
Jackson 是 Spring Boot 默认的 JSON 库,功能最稳健。
Java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public boolean isJsonEmpty(String jsonStr) {
if (jsonStr == null || jsonStr.trim().isEmpty()) {
return true;
}
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
// isEmpty() 可以检查 {} 或 []
return node.isEmpty();
} catch (Exception e) {
return true; // 格式非法也可视为广义上的空
}
}
2. 使用 Fastjson (常见于国内项目)
Fastjson 提供了非常直接的判断方法。
Java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public boolean isJsonEmpty(String jsonStr) {
if (jsonStr == null || jsonStr.isEmpty()) return true;
try {
Object obj = JSON.parse(jsonStr);
if (obj instanceof JSONObject) {
return ((JSONObject) obj).isEmpty();
} else if (obj instanceof JSONArray) {
return ((JSONArray) obj).isEmpty();
}
return false;
} catch (Exception e) {
return true;
}
}
3. 简单的正则/字符串判断 (轻量级)
如果你不想解析整个对象(为了性能),只想快速判断是不是 {} 或 []:
Java
public static boolean isBasicEmptyJson(String str) {
if (str == null) return true;
String trimmed = str.trim();
return trimmed.equals("{}") || trimmed.equals("[]") || trimmed.isEmpty();
}
总结对比
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 严谨校验 | Jacksonnode.isEmpty() | 能识别{ }(带空格) 等复杂情况。 |
| 极致性能 | 字符串equals(“{}”) | 无需创建解析对象,适用于已知格式简单的场景。 |
| 通用业务 | Fastjson | 代码量少,API 直观。 |
欢迎关注公众号