JSON解析报错求助:Java读取JSON文件代码异常排查
解析JSON文件时的错误排查与修复
我看了你的代码,发现几个很可能导致解析错误的问题,咱们一步步来解决:
1. 文件路径的转义错误
这是最常见的问题之一!你写的文件路径是:
new File("C:\Users\Ismr\work2\response.json")
在Java字符串里,反斜杠\是转义字符,比如\U会被当成Unicode转义序列的开头,直接这样写会让JVM无法正确解析路径,要么找不到文件,要么直接抛出语法/解析异常。
解决方法二选一:
- 把反斜杠改成双反斜杠(转义后的反斜杠):
new File("C:\\Users\\Ismr\\work2\\response.json") - 或者用正斜杠(Java支持用正斜杠作为路径分隔符,跨平台更友好):
new File("C:/Users/Ismr/work2/response.json")
2. 冗余的JsonParser/JsonFactory实例
你方法参数里已经传入了JsonParser jsonParser,但又在方法内部重新创建了JsonFactory和JsonParser实例,这不仅没必要,还可能导致资源泄漏或者逻辑混乱。如果这个参数是用来处理输入的,应该直接复用它;如果不需要这个参数,建议直接删除,简化代码。
3. 可选优化:异常处理逻辑
你在方法声明里抛出了JsonParseException和IOException,但又在内部catch了这些异常并打印栈轨迹。这会让上层调用者无法感知到异常的发生——如果需要上层处理异常,就不要在内部catch;如果要在内部处理,就不用在方法声明里抛出,二者选其一即可。
额外检查点:Result类的序列化配置
Jackson要正确把JSON映射到Result对象,需要满足以下条件:
Result类要有无参构造函数(Jackson默认需要)- 字段要有对应的getter/setter方法,或者用
@Data注解(如果用Lombok的话自动生成) - 如果JSON字段名和类字段名不一致,要加
@JsonProperty注解映射
修正后的示例代码
这里我简化了冗余的代码,同时修复了路径问题:
private static void parseJSON(Response resp, Result res) throws IOException { ObjectMapper mapper = new ObjectMapper(); // 用转义后的路径 File jsonFile = new File("C:\\Users\\Ismr\\work2\\response.json"); TypeReference<List<Result>> tRes = new TypeReference<List<Result>>() {}; List<Result> ress = mapper.readValue(jsonFile, tRes); for (Result result : ress) { System.out.println(result.toString()); } }
内容的提问来源于stack exchange,提问作者vasilek
相关产品推荐
相关产品推荐

