GitHub Actions遍历JSON对象数组失败,策略矩阵报错求助
解决GitHub Actions Strategy矩阵遍历对象数组报错问题
问题原因
GitHub Actions的strategy.matrix要求传入键值对结构的对象(键对应参数名,值为待遍历的数组),而你直接传入了对象数组,不符合格式要求,因此触发"A sequence was not expected"错误。
解决步骤
1. 调整JSON输出格式(两种方式选其一)
方式一:修改读取JSON的Shell命令
在read-json步骤中,把原对象数组包装成带键的JSON对象:
- name: Read JSON id: read-json run: | JSON=$(cat ./neededServers.json) # 将原数组包装到名为servers的键下 echo "matrix={\"servers\": $JSON}" >> $GITHUB_OUTPUT
方式二:直接生成带键的JSON文件
如果可以控制neededServers.json的生成逻辑,直接输出如下格式的内容:
{ "servers": [ { "config":"small", "ID":"1234", "memory":"4096", "vcpus":"2" }, { "config":"small", "ID":"2345", "memory":"4096", "vcpus":"2" } ] }
这种情况下read-json步骤无需修改,保持原来的读取逻辑即可。
2. 修改Create作业的Matrix配置
将strategy.matrix调整为引用包装后的数组:
create: needs: servers runs-on: ubuntu-latest strategy: matrix: server: ${{ fromJson(needs.servers.outputs.matrix).servers }} steps: - name: Test run: | echo "Server ID: ${{ matrix.server.ID }}" echo "Config: ${{ matrix.server.config }}"
验证逻辑
调整后,strategy.matrix会遍历servers数组中的每个对象,每个对象作为一个独立的matrix实例,你可以通过${{ matrix.server.[属性名] }}的方式访问对象中的字段。
内容的提问来源于stack exchange,提问作者LUKER
相关产品推荐
相关产品推荐

