为何指定JSONPath匹配JSON对象无结果?是否路径写法有误?
JSONPath写法问题解析
你用的$.test_type[?(@.id == 'myId')]之所以没返回结果,核心原因是过滤器[?(...)]是用来筛选数组元素的,不能直接套在单个对象上——$.test_type指向的是一个单独的JSON对象,不是数组,所以过滤器无法生效。
而..[?(@.id=='myId')]能正常匹配,是因为..是递归遍历运算符,会扫遍所有层级的节点,当它碰到带id字段的test_type对象时,过滤器就能匹配上这个节点。
正确的写法参考
如果要精准定位test_type并验证它的id值,推荐两种方式:
直接访问对象后单独校验(最简洁通用)
先通过$.test_type拿到目标对象,再判断它的id属性是否等于myId,这在绝大多数场景下都适用。把单个对象转为数组后用过滤器(适合必须用过滤器的场景)
部分JSONPath实现允许把单个对象包装成数组来应用过滤器,写法比如:$.[test_type][?(@.id == 'myId')]或者有些实现支持这种简化写法:
$.test_type[(@.id == 'myId')]不过这种写法兼容性不如第一种,优先选直接访问的方式更稳妥。
内容的提问来源于stack exchange,提问作者cmn
相关产品推荐
相关产品推荐

