Bash中遍历JSON文件提取字段并循环执行curl命令的需求
我来帮你搞定这个从JSON提取字段并循环执行curl的需求!以下是具体的实现方案:
解决方案:提取JSON字段并批量执行curl命令
核心思路是先通过jq把每个issue对应的三个字段值配对输出,再用循环读取每一组值来执行curl命令,刚好对应你需要的9次执行。
步骤1:提取对齐的字段值
首先用jq将每个issue的key、project.key和customfield_10107.id按空格分隔输出,确保三个值一一对应:
jq -r '.issues[] | "\(.key) \(.fields.project.key) \(.fields.customfield_10107.id)"' 1.json
执行后会输出类似这样的内容(对应9条issue数据):
TECH-XXX1 TECH 10400 TECH-XXX2 TECH 10400 ... TECH-XXX9 TECH 10400
步骤2:循环执行curl命令
接下来用while read循环读取每一行的三个值,分别赋值给变量后执行curl。下面是完整的脚本示例(你可以根据实际需求修改curl的请求参数):
#!/bin/bash # 遍历提取到的每一组字段值,依次执行curl jq -r '.issues[] | "\(.key) \(.fields.project.key) \(.fields.customfield_10107.id)"' 1.json | while read -r project parent custom_field; do echo "正在处理 ${project}..." # 替换为你实际需要的curl命令,这里是模板示例 curl -X POST \ -H "Content-Type: application/json" \ -d '{ "issue_key": "'"${project}"'", "parent_project": "'"${parent}"'", "custom_field_id": "'"${custom_field}"'" }' \ "https://your-api-endpoint.com/target-path" done
关键细节说明:
jq的-r参数确保输出原始字符串,避免转义引号带来的问题;read -r保证读取包含特殊字符的字符串时不会出错;- 如果
customfield_10107.id可能存在空值,可以添加判断逻辑跳过,比如:if [ -n "$custom_field" ]; then ... fi; - 把示例中的API地址和请求体替换成你实际需要调用的接口信息。
无脚本直接执行版本
如果你不想保存脚本文件,也可以直接在终端里运行这条整合命令:
jq -r '.issues[] | "\(.key) \(.fields.project.key) \(.fields.customfield_10107.id)"' 1.json | while read -r p pr cf; do curl -X POST -H "Content-Type: application/json" -d '{"issue_key":"'"$p"'","parent_project":"'"$pr"'","custom_field_id":"'"$cf"'"}' "https://your-api-endpoint.com/target-path"; done
这样就能精准执行9次curl,对应每个issue的字段值啦!
内容的提问来源于stack exchange,提问作者Milister




