使用JQ对JSON数组对象做多条件筛选提取对应ID的问题
修正后的查询语句
jq '.[0] | select(.name == "build_job" and .status == "success" and any(.artifacts[]; .file_type == "archive" and .size > 0)) | .id'
逻辑说明
你之前的写法存在两个问题:
- 直接用
.artifacts[].file_type == "archive"只能判断数组中存在archive类型的元素,无法关联校验同一个元素的size字段 - 直接用
.artifacts[]展开数组的写法,在多匹配场景下会导致输出重复结果
修正方案用jq内置的any()函数实现需求:
any()的第一个参数是要遍历的artifacts数组元素- 第二个参数是单个元素需要满足的组合判断条件,只要数组中存在至少一个元素同时满足「
file_type为archive、size大于0」,就会返回true
如果你的业务场景要求所有archive类型的artifact的size都大于0,把any替换为all即可。
内容的提问来源于stack exchange,提问作者SylvainB
相关产品推荐
相关产品推荐

