如何用JSONPath表达式按key值过滤数组并保留对象结构?
用JSONPath过滤数组并返回完整匹配对象
问题说明
给定JSON数组:
[ { "s3_uri":"s3://fake-s3-bucket/fact_table/fact_table.csv", "dataset":"fact_table" }, { "s3_uri":"s3://fake-s3-bucket/dimension_table/dimension_table.csv", "dataset":"dimension_table" } ]
需要筛选出dataset值为dimension_table的完整对象,期望结果:
[ { "s3_uri":"s3://fake-s3-bucket/dimension_table/dimension_table.csv", "dataset":"dimension_table" } ]
此前使用表达式$[*][?(@.dataset==dimension table)]仅返回属性值,无法保留对象结构:
[ "s3://fake-s3-bucket/dimension_table/dimension_table.csv", "dimension_table" ]
解决方案
可以实现,正确的JSONPath表达式为:
$[?(@.dataset == 'dimension_table')]
错误原因解析
之前的表达式存在两个问题:
- 多余的
[*]:$[*]会遍历数组内每个对象,后续的[?(...)]会变成遍历对象的所有属性并筛选属性值,而非筛选整个对象。 - 字符串未加引号:
dimension_table是字符串常量,必须用单/双引号包裹,否则会被当作变量解析。
内容的提问来源于stack exchange,提问作者Geocoder
相关产品推荐
相关产品推荐

