在Java中处理JSON解析异常需使用try-catch捕获第三方库抛出的特定异常:Jackson抛JsonProcessingException,Gson抛JsonSyntaxException,org.json抛JSONException;应始终对不可信输入进行异常处理,记录错误日志并根据业务需求返回默认值或提示格式错误,避免程序中断。

在Java中处理JSON解析异常,关键在于使用try-catch结构捕获解析过程中可能出现的异常。由于Java本身不内置JSON支持,通常会借助第三方库如Jackson、Gson或org.json来操作JSON数据。这些库在解析格式错误的JSON字符串时会抛出特定异常,必须合理捕获并处理。
常见的JSON解析异常类型
不同库抛出的异常类型略有差异,了解它们有助于精准捕获问题:
- Jackson: JsonParseException(来自com.fasterxml.jackson.core)
- Gson: JsonSyntaxException(来自com.google.gson)
- org.json: JSONException(来自org.json包)
这些异常都属于运行时异常,但建议显式捕获,避免程序意外中断。
使用try-catch处理Jackson的JSON解析异常
Jackson是广泛使用的JSON库。以下示例展示如何安全解析JSON字符串:
立即学习“Java免费学习笔记(深入)”;
ObjectMapper mapper = new ObjectMapper();
String jsonInput = "{ \"name\": \"Alice\", \"age\": not_a_number }"; // 错误的JSON
try {
Person person = mapper.readValue(jsonInput, Person.class);
System.out.println("解析成功: " + person.getName());
} catch (JsonProcessingException e) {
System.err.println("JSON解析失败: " + e.getMessage());
// 可记录日志或返回默认值
}
说明: Jackson将格式错误、类型不匹配等问题统一抛为JsonProcessingException,一个catch块即可覆盖多数情况。
使用try-catch处理Gson的JSON解析异常
Gson使用方式更简洁,但仍需处理可能的语法错误:
Gson gson = new Gson();
String badJson = "{ \"title\": \"Book\", \"pages\": abc }";
try {
Book book = gson.fromJson(badJson, Book.class);
System.out.println("书名: " + book.getTitle());
} catch (JsonSyntaxException e) {
System.err.println("JSON格式错误: " + e.getMessage());
}
注意: 如果字段类型不匹配(如期望数字却得到字符串),Gson可能静默失败或设为默认值,因此建议配合校验逻辑使用。
通用异常处理建议
- 始终对不可信来源的JSON输入进行try-catch包裹
- 在catch块中记录详细错误信息,便于调试
- 根据业务需求决定是否返回默认对象、空值或向上抛出自定义异常
- 对于用户输入,应提示“数据格式错误”而非暴露技术细节
基本上就这些。只要在调用parse或fromJSON方法时加上try-catch,就能有效防止JSON解析导致程序崩溃。关键是选择正确的异常类型,并给出合理的恢复策略。










