Jackson读取JSON文件报错Unrecognized token 'src'如何解决?
问题根源及解决方法
核心问题1:readValue方法用法错误
你传入的第一个参数是字符串类型的文件路径,Jackson的readValue方法如果接收字符串作为第一个参数,会直接把该字符串当做JSON内容解析,不会去读取路径对应的本地文件,因此才会报错提示无法识别src开头的内容——本质是把文件路径字符串当成JSON来解析了,格式自然不匹配。
如果需要读取路径对应的文件内容,需要将第一个参数改为File类型对象。
核心问题2:JSON结构与映射类型不匹配
你提供的JSON文件根节点是数组(外层包裹了[]),内部才是单个PostPojo对象,直接映射到PostPojo.class会出现类型不匹配错误,需要根据实际业务需求二选一调整:
- 方案A:修改JSON文件,删除外层的
[],保留内部单个对象结构 - 方案B:调整代码,先将JSON解析为
List<PostPojo>集合,再取出对应元素返回
核心问题3:返回值未接收赋值
你原有代码中readValue的返回值没有赋值给postPojo变量,直接返回会出现变量未定义的编译错误,同时异常捕获范围不全,缺少IO相关异常的处理。
修正后的完整代码示例
如果你选择方案A(修改JSON为单个对象):
public static PostPojo readFile(String titleFile) { String pathJSONFile = "src/main/resources/"+titleFile+".json"; ObjectMapper objectMapper = new ObjectMapper(); PostPojo postPojo = null; try { // 传入File对象读取文件,接收返回值 postPojo = objectMapper.readValue(new File(pathJSONFile), PostPojo.class); } catch (IOException e) { e.printStackTrace(); } return postPojo; }
如果你选择方案B(保留JSON数组结构):
public static PostPojo readFile(String titleFile) { String pathJSONFile = "src/main/resources/"+titleFile+".json"; ObjectMapper objectMapper = new ObjectMapper(); List<PostPojo> postList = null; try { // 用TypeReference解析为List集合 postList = objectMapper.readValue(new File(pathJSONFile), new TypeReference<List<PostPojo>>() {}); } catch (IOException e) { e.printStackTrace(); } // 取集合第一个元素返回,可根据实际需求调整 return postList == null ? null : postList.get(0); }
注意:使用上述代码需要提前导入
java.io.File、com.fasterxml.jackson.core.type.TypeReference相关类,根据项目依赖调整导入路径即可。
内容的提问来源于stack exchange,提问作者Денис Задорожний
相关产品推荐
相关产品推荐

