如何用JSONPath提取匿名嵌套JSON块中指定key对应的value?
JSONPath提取指定key对应value的问题解决
你的表达式失效的核心问题是过滤条件的位置放错了:
- 原表达式
$.result.extras[*].value[?(key='update_frequency')]中,[*].value已经将路径定位到了所有extras对象的value字符串上,此时再用[?(key='update_frequency')]过滤,当前上下文是单个字符串,根本不存在key属性,自然匹配不到结果。
正确的JSONPath表达式
要实现需求,需要先筛选数组中符合条件的对象,再提取其value:
$.result.extras[?(@.key == 'update_frequency')].value
- 解释:
[?(@.key == 'update_frequency')]:在extras数组中遍历每个对象(@代表当前遍历的数组元素),筛选出key等于update_frequency的对象;.value:从筛选出的对象中提取对应的value值。
部分JSONPath实现允许用=替代==,所以也可以写成:
$.result.extras[?(@.key='update_frequency')].value
这个表达式不受extras数组的元素数量、顺序影响,只要存在目标key就能准确提取对应value。
内容的提问来源于stack exchange,提问作者h1m aga1n
相关产品推荐
相关产品推荐

