在GitHub Actions矩阵中访问单个JSON字段及嵌套JSON
问题解答
一、能否访问project这类单个值?
可以,分两种场景处理:
1. 在矩阵运行步骤中直接访问单个值
你的现有配置已经把JSON数组解析为矩阵的include项,每个矩阵实例都会包含project和config字段。在step2的步骤里,直接通过${{ matrix.project }}或${{ matrix.config }}就能访问单个值,比如修改run命令:
steps: - run: echo "当前项目:${{ matrix.project }},配置:${{ matrix.config }}"
2. 在matrix配置阶段单独提取单个值
如果想仅基于project字段生成矩阵(而非整个JSON对象),可以通过两种方式实现:
- 方式一:在step1输出单独的字段数组
修改step1的输出逻辑,直接输出project列表:
然后在step2的matrix中引用:- id: build run: echo "projects=[\"foo\",\"bar\"]" >> $GITHUB_OUTPUTstrategy: matrix: project: ${{ fromJson(needs.step1.outputs.projects) }} - 方式二:用表达式提取现有JSON中的字段
借助GitHub Actions的map函数,从原JSON数组中提取project字段:strategy: matrix: project: ${{ fromJson(needs.step1.outputs.matrix) | map(attribute='project') }}
二、嵌套JSON对象的访问方法
如果输出的JSON包含嵌套结构,比如:
[{"project":"foo","config":{"mode":"Debug","target":"x86"}},{"project":"bar","config":{"mode":"Release","target":"x64"}}]
1. 在步骤中访问嵌套字段
通过链式点语法直接访问,比如:
steps: - run: | echo "项目:${{ matrix.project }}" echo "构建模式:${{ matrix.config.mode }}" echo "目标架构:${{ matrix.config.target }}"
2. 在matrix配置阶段提取嵌套字段
同样用map函数配合链式属性提取,比如要提取所有config.mode字段生成矩阵:
strategy: matrix: build_mode: ${{ fromJson(needs.step1.outputs.matrix) | map(attribute='config.mode') }}
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

