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

JsonPath Jayway Java实现按refPath筛选值报类型错误求解

问题原因

抛出Could not determine value type错误的核心原因是输入JSON存在一层动态UUID格式的无固定键名,refPath不是顶层数组的直接属性,使用固定属性名的常规路径写法遍历到动态键层时,Jayway无法识别属性类型,触发解析异常。

可用JsonPath表达式

单值匹配(匹配refPath包含e0586818-ba2c-4b65-afec-3c48d817b584的对象)

$[*][?(@.refPath contains 'e0586818-ba2c-4b65-afec-3c48d817b584')]

多值同时匹配(需求场景:refPath同时包含两个指定UUID)

$[*][?(@.refPath contains 'e0586818-ba2c-4b65-afec-3c48d817b584' && @.refPath contains '06c089a6-4de0-43d3-8dc7-181addf4c933')]

表达式逻辑说明

  • $[*]:遍历最外层根数组的所有元素
  • [?(过滤规则)]:对当前遍历到的、持有多个动态UUID键的对象做属性筛选,自动保留符合条件的键值对结构,不会丢失外层UUID键
  • @.refPath contains 'xxx':判断当前属性值内的refPath数组是否包含目标值,多条件用&&连接即要求同时满足
Java端调用配置建议

低版本Jayway建议添加如下配置,避免遍历空节点时抛错,同时保证返回结果统一为列表结构:

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.JsonPath;

// 初始化配置
Configuration config = Configuration.builder()
        .options(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS)
        .build();

// 执行查询
String jsonPath = "$[*][?(@.refPath contains 'e0586818-ba2c-4b65-afec-3c48d817b584' && @.refPath contains '06c089a6-4de0-43d3-8dc7-181addf4c933')]";
List<?> result = JsonPath.using(config).parse(yourInputJson).read(jsonPath);

执行后返回的结果结构和期望输出完全一致,仅保留refPath同时命中两个目标UUID的2be3d660-cab0-4db8-83b9-1baf212270c5对应条目。

注意事项

不要写成$[*].refPath这类固定属性路径,refPath和顶层数组之间隔了动态UUID键层,这类写法会直接触发类型解析错误。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:18:46