如何在GitHub Actions中遍历JSON的buildapp节点并打印键值对
在GitHub Actions中读取JSON并遍历打印buildapp节点
你的input.json内容如下:
{ "appname": "apple", "category": "fruit", "buildapp": [ { "workdir": "work1", "tesdir": "test1", "setdata": { "set1": "value1", "set2": "value2" } }, { "workdir": "work2", "tesdir": "test2", "setdata": { "set1": "value3", "set2": "value4" } } ] }
可以利用GitHub Actions runner预装的jq工具解析JSON并完成遍历打印,以下是完整的工作流配置:
工作流文件示例(.github/workflows/process-json.yml)
name: Process Input JSON on: [push, pull_request] jobs: iterate-buildapp: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Traverse buildapp and print all key-value pairs run: | # 获取buildapp数组的元素数量 item_count=$(jq '.buildapp | length' input.json) # 循环遍历每个buildapp元素 for ((index=0; index<item_count; index++)); do echo "===== Buildapp 条目 $((index+1)) =====" # 打印当前条目的顶层键值对 jq ".buildapp[$index] | to_entries[] | \"\(.key): \(.value)\"" input.json # 展开打印setdata里的嵌套键值对 echo "----- Setdata 详情 -----" jq ".buildapp[$index].setdata | to_entries[] | \"\(.key): \(.value)\"" input.json done
执行后的输出示例
===== Buildapp 条目 1 ===== "workdir: work1" "tesdir: test1" "setdata: {\"set1\":\"value1\",\"set2\":\"value2\"}" ----- Setdata 详情 ----- "set1: value1" "set2: value2" ===== Buildapp 条目 2 ===== "workdir: work2" "tesdir: test2" "setdata: {\"set1\":\"value3\",\"set2\":\"value4\"}" ----- Setdata 详情 ----- "set1: value3" "set2: value4"
关键逻辑说明
jq '.buildapp | length' input.json:计算buildapp数组的元素个数,用于控制循环次数to_entries[]:将JSON对象转换为键值对条目,方便逐个打印- 单独处理
setdata是为了避免直接输出嵌套的JSON对象,而是展开显示内部的键值对,让输出更清晰
内容的提问来源于stack exchange,提问作者wehelpdox
相关产品推荐
相关产品推荐

