如何在GitHub Actions中将空格分隔单词列表转为JSON数组用作策略矩阵
GitHub Actions中转换空格分隔列表为JSON数组的实现方法
1. 在Bash步骤中生成合法JSON数组
利用GitHub Runner自带的jq工具,把空格分隔的字符串转成标准JSON数组:
# 定义你的空格分隔列表 MY_LIST="hello1 hello2 hello3" # 转换为JSON数组:先把空格替换为换行,再逐个转成JSON字符串,最后合并为数组 JSON_ARRAY=$(echo "$MY_LIST" | tr ' ' '\n' | jq -R . | jq -s .)
执行后JSON_ARRAY的值就是["hello1","hello2","hello3"],完全符合JSON语法规范。
2. 将JSON数组写入输出变量
把生成的JSON数组写入GITHUB_OUTPUT,供后续作业调用:
echo "matrix_values=$JSON_ARRAY" >> "$GITHUB_OUTPUT"
3. 在策略矩阵中使用fromJSON读取
在依赖的作业里,通过fromJSON()解析输出的JSON数组,直接作为矩阵参数:
jobs: # 生成矩阵参数的前置作业 prepare-matrix: runs-on: ubuntu-latest outputs: matrix_items: ${{ steps.gen-matrix.outputs.matrix_values }} steps: - id: gen-matrix run: | MY_LIST="hello1 hello2 hello3" JSON_ARRAY=$(echo "$MY_LIST" | tr ' ' '\n' | jq -R . | jq -s .) echo "matrix_values=$JSON_ARRAY" >> "$GITHUB_OUTPUT" # 使用矩阵的作业 run-with-matrix: needs: prepare-matrix runs-on: ubuntu-latest strategy: matrix: target: ${{ fromJSON(needs.prepare-matrix.outputs.matrix_items) }} steps: - name: Process item run: echo "当前处理目标:${{ matrix.target }}"
特殊情况处理
如果列表元素包含空格,需要先将元素用引号包裹(比如MY_LIST='"hello world" hello2'),再用jq的split方法处理:
JSON_ARRAY=$(echo "$MY_LIST" | jq -c 'split(" ")')
内容的提问来源于stack exchange,提问作者Aron
相关产品推荐
相关产品推荐

