使用JsonPath的read方法返回路径而非目标值,原因是什么?
问题分析与解决
你遇到的问题核心在于错误地将JsonNode转成字符串传入JsonPath的parse方法,导致解析异常:
Jackson的JsonNode.toString()输出的是带单引号的非标准JSON格式,而JsonPath默认解析器只识别标准双引号的JSON。这种情况下,JsonPath没有把输入解析成JSON对象,而是当成了一个普通的字符串根节点。当你用$.field1查询时,根节点是字符串,不存在对应的字段,最终出现了返回路径表达式而非目标值的异常行为。
修正方案
直接将JsonNode对象传入parse方法,无需转成字符串,JsonPath支持直接处理Jackson的JsonNode(需确保引入对应的Jackson适配依赖)。
修正后的代码
JsonNode node = ...; String path = "$.field1"; Configuration conf = Configuration.defaultConfiguration().addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL); // 直接传入JsonNode对象,跳过字符串转换步骤 ReadContext context = JsonPath.using(conf).parse(node); Object value = context.read(path); System.out.println(value); // 预期输出: value1
依赖说明
确保项目中引入JsonPath的Jackson适配模块,以支持直接解析JsonNode:
<!-- Maven依赖示例 --> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path-jackson</artifactId> <version>2.8.0</version> </dependency>
内容的提问来源于stack exchange,提问作者AznBoyStride
相关产品推荐
相关产品推荐

