如何用JsonPath精准获取满足name.value='text'的status值?当前查询返回多余结果
问题分析与解决
问题根源
你当前的JsonPath表达式存在两个关键问题:
- 条件值匹配错误:你需要筛选
value='text'的条目,但表达式里写成了value='test',完全偏离目标数据; - 内层数组的存在性判断逻辑失效:直接用
@.name[?(...)]作为外层过滤条件时,部分JsonPath实现会将非空数组直接判定为true,哪怕数组里没有符合条件的元素,导致所有values元素都被错误选中。
正确的JsonPath表达式
针对你的需求(筛选values数组中,name子数组存在language='EN'且value='text'的元素,返回其status),结合主流JsonPath实现(如Jayway),可使用以下两种写法:
写法1:通过匹配结果长度判断存在性
$.values[?(@.name[?(@.language == 'EN' && @.value == 'text')].length() > 0)].status
写法2:使用any()方法(Jayway专属语法)
$.values[?(@.name.any(it.language == 'EN' && it.value == 'text'))].status
验证结果
用你的JSON示例测试:
{"values":[ {"name":[{"language":"EN","value":"text"}, {"language":"DE","value":"text"}], "status":"active"}, {"name":[{"language":"EN","value":"test2"}, {"language":"DE","value":"test2"}], "status":"active"} ] }
正确表达式会仅返回符合条件的结果:
["active"]
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

