如何编写筛选名称含mydrive且hosts为空的卷的JSONPath查询
符合要求的JSONPath查询
不同JSONPath实现的语法细节略有差异,以下写法基于主流支持扩展特性的JSONPath实现(如jsonpath-plus、jsonpath-ng),可以直接满足需求:
查询表达式
$['purefa_info']['volumes'][?(@property.match(/mydrive/) && @.hosts.length === 0)]
语法说明
- 前半段
$['purefa_info']['volumes']定位到所有卷的父节点 [?()]为条件过滤器,括号内写筛选规则:@property指代当前遍历的卷的键名,用match(/mydrive/)正则匹配筛选键名包含mydrive的卷@.hosts.length === 0筛选hosts数组为空的卷
结果返回配置
要得到路径数组而不是卷对象本身,需要在调用JSONPath解析工具时指定返回类型为路径:
- JavaScript端使用jsonpath-plus时,传入参数
{resultType: 'path'}即可直接得到目标数组 - Python端使用jsonpath-ng时,将匹配到的结果直接转为字符串格式即可得到路径
验证结果
用你提供的测试JSON执行以上查询后,返回结果和预期完全一致:
[ "$['purefa_info']['volumes']['mydrive-0d32e3799a']", "$['purefa_info']['volumes']['mydrive-55c61ab79c']" ]
内容的提问来源于stack exchange,提问作者philoub
相关产品推荐
相关产品推荐

