You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jq提取id与name并批量执行curl生成对应JSON文件的问题

解决方案

核心思路

通过jq将JSON中的id和name输出为Shell可安全解析的格式,再结合Shell循环遍历每一组值,执行curl并将结果写入指定命名的文件。

方法一(推荐:兼容含特殊字符的name)

使用jq的@sh过滤器,将id和name转换为Shell安全的带引号字符串,避免因name含空格、特殊字符导致的解析错误:

# 假设输入JSON文件名为input.json,替换为你的实际文件或stdin
while read -r id name; do
  # 替换下面的curl URL为你的实际API地址
  curl -o "${name}-${id}.json" "https://your-api-endpoint.com/data/${id}"
done < <(jq -r '.[] | [.id, .name] | @sh' input.json)

关键解释:

  • jq -r '.[] | [.id, .name] | @sh':遍历JSON数组中的每个对象,将id和name打包为数组,再用@sh转义为Shell可识别的安全格式(输出示例:'2253' 'steve')。
  • read -r id name:Shell会自动去除引号,将两个值分别赋值给id和name变量。
  • "${name}-${id}.json":用变量拼接生成目标文件名,确保格式符合要求。

方法二(适合无特殊字符的name)

如果确定name不含空格或特殊字符,可以用简单的分隔符(如|)来输出:

while IFS='|' read -r id name; do
  curl -o "${name}-${id}.json" "https://your-api-endpoint.com/data/${id}"
done < <(jq -r '.[] | "\(.id)|\(.name)"' input.json)

验证jq输出

执行jq -r '.[] | [.id, .name] | @sh' input.json,会得到如下输出,确保每个对象的id和name被正确配对:

'2253' 'steve'
'2363' 'mary'
'2226' 'chris'

内容的提问来源于stack exchange,提问作者Trevor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:35:28