Azure DevOps Linux构建代理中jq筛选JSON数据的问题求助
解决jq筛选、字段提取与排序的问题
你遇到的核心问题有两个:一是比较运算符使用错误(用了赋值符号=而非相等判断==),二是select的位置不正确。以下是修正后的两种可行命令:
方式一:先筛选再提取字段(效率更高)
在遍历.value数组时,先筛选出result为succeeded的元素,再提取所需字段,最后按日期排序:
jq '[.value[] | select(.result == "succeeded") | {id: .id, date: .finishedDate, state: .state, result: .result}] | sort_by(.finishedDate)' $(Build.SourcesDirectory)/test2.json
方式二:先提取字段再筛选
先提取所有元素的目标字段,再从生成的新数组中筛选符合条件的条目,最后排序(这里可以直接用重命名后的date字段排序):
jq '[.value[] | {id: .id, date: .finishedDate, state: .state, result: .result}] | map(select(.result == "succeeded")) | sort_by(.date)' $(Build.SourcesDirectory)/test2.json
关键注意事项
- jq中判断相等必须用
==,用=会被解析为赋值操作,直接导致筛选逻辑失效或语法报错。 - 要确保
select作用于正确层级:如果在遍历单个数组元素时使用,需放在处理单元素的管道中;如果在整个数组层面筛选,要用map遍历数组内的每个元素做判断。
内容的提问来源于stack exchange,提问作者kuytsce
相关产品推荐
相关产品推荐

