Java中JSON解析失败应通过try-catch捕获具体异常(如JSONException、JsonProcessingException、JsonSyntaxException),结合空值与格式校验,记录日志、返回默认值或抛出自定义异常,避免程序崩溃或空指针。

Java中处理JSON字符串解析失败,核心是把解析操作放在try块里,把可能抛出的异常在catch中捕获并做合理应对,而不是让程序崩溃或返回null导致后续空指针。
捕获具体的JSON解析异常
不同JSON库抛出的异常类型不同,要针对性捕获,避免用笼统的Exception掩盖问题:
- org.json:捕获JSONException
- com.fasterxml.jackson:捕获JsonProcessingException(包含JsonParseException、JsonMappingException等子类)
- com.google.gson:捕获JsonSyntaxException
解析前校验字符串非空和基本格式
空字符串、纯空白、null值会导致立即抛异常,提前检查可减少不必要的try-catch开销:
- 用StringUtils.isNotBlank(jsonStr)(Apache Commons)或jsonStr != null && !jsonStr.trim().isEmpty()判断
- 简单跳过首尾空白:jsonStr = jsonStr.trim(),再解析
- 不建议仅靠try-catch兜底所有非法输入,应结合前端/上游约束+服务端基础校验
提供有意义的错误反馈与默认行为
catch块里不要只写e.printStackTrace(),应记录日志、返回友好提示或降级处理:
立即学习“Java免费学习笔记(深入)”;
- 记录结构化日志:log.warn("JSON解析失败,原始内容: {}", jsonStr, e)
- 返回默认对象(如空DTO、带错误码的响应体)
- 必要时抛出自定义业务异常,比如InvalidRequestException("JSON格式错误"),便于上层统一处理
示例:Jackson解析带兜底的写法
ObjectMapper mapper = new ObjectMapper();
try {
MyData data = mapper.readValue(jsonStr, MyData.class);
return data;
} catch (JsonProcessingException e) {
log.error("解析JSON失败: {}", jsonStr, e);
throw new IllegalArgumentException("请求数据格式错误", e);
}


















