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

Bash迭代调用API生成合法JSON数组的最优实现方案

实现方案

直接用jq内置的数组收集能力即可,不需要手动拼接逗号,也不需要额外的后处理步骤,是稳定性最高、代码最简洁的实现方式。

修正后可直接使用的代码

query_api() {
  for p in ${param}; do
    # 修正了原curl的GET参数写法,自动处理参数URL编码避免请求异常
    curl -s -g -G --data-urlencode "param=${p}" '/api/query'
  done | jq -s '.' > results.json
}

核心逻辑说明

  • jq的-s(slurp)模式会自动读取管道输入的所有独立JSON对象,等所有请求完成后自动组装为标准合法的JSON数组,自动处理对象间的逗号分隔、首尾方括号,完全不会出现末尾多余逗号的问题。
  • 整个流程全程按JSON结构化数据处理,不会出现纯文本拼接JSON时遇到的转义错误、格式不合法问题,生成的results.json可以直接被jq、其他JSON解析工具读取做排序、筛选操作。

不推荐其他方案的原因

  • 循环内手动添加逗号:需要额外判断当前是否为最后一次迭代,增加无意义的逻辑分支,一旦某一次API请求失败返回非JSON内容,整份文件直接格式错误,排查成本高。
  • 生成零散JSON后做文本后处理:用正则、字符串替换的方式修改JSON属于非结构化处理,遇到JSON值里包含逗号、引号、嵌套对象时非常容易出现匹配错误,稳定性极差。

进阶效率优化

如果参数列表比较长,可以用xargs开启并行请求,大幅缩短总执行时间,输出结果依然是合法JSON数组:

# -P 5 表示同时开5个并行请求,可根据实际接口承载能力调整
echo ${param} | xargs -n 1 -P 5 -I {} curl -s -g -G --data-urlencode "param={}" '/api/query' | jq -s '.' > results.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:15:57