如何在GitHub Actions中遍历矩阵内嵌套的对象数组?
如何在GitHub Actions中遍历嵌套数组并输出值
首先修正原配置里的JSON输出转义问题(原命令的转义会导致JSON格式错误),然后通过jq工具解析嵌套数组,实现指定格式的输出。修改后的完整配置如下:
on: push: branches: - main jobs: step1: runs-on: ubuntu-latest outputs: matrix: ${{ steps.build.outputs.matrix }} steps: - id: build run: | # 用单引号避免转义问题,确保输出合法JSON echo 'matrix=[{"project":"foo","config":"Debug","nested":[{"val":"val1"}]},{"project":"bar","config":"Release","nested":[{"val":"val2"},{"val":"val3"}]}]' >> $GITHUB_OUTPUT step2: needs: step1 runs-on: ubuntu-latest strategy: matrix: include: ${{ fromJson(needs.step1.outputs.matrix) }} steps: - run: | # 输出迭代序号(strategy.job-index从0开始,加1转为从1计数) echo "iteration ${{ strategy.job-index + 1 }}:" # 将嵌套数组转为JSON字符串,用jq提取每个val字段的值 echo '${{ toJSON(matrix.nested) }}' | jq -r '.[] | .val'
关键说明:
- 修正JSON输出:原step1中的
echo命令转义错误,改用单引号包裹JSON内容,确保输出的matrix是合法的JSON格式,避免fromJson解析失败。 - 迭代序号生成:利用
${{ strategy.job-index }}获取当前矩阵任务的索引(从0开始),加1后得到从1开始的迭代序号。 - 嵌套数组遍历:通过
toJSON(matrix.nested)将嵌套数组转为标准JSON字符串,再用jq工具遍历数组,提取每个元素的val字段值。Ubuntu环境默认已安装jq,无需额外安装。
执行后输出效果与需求一致:
iteration 1: val1 iteration 2: val2 val3
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

