You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Денис Задорожний

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:04