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

如何用Shell循环读取JSON文件调用API?Shell与Python哪个更适配?

批量API调用方案咨询

背景信息

现有包含700条用户数据的JSON文件,结构如下:

[
 {
   "firstName": "John",
   "lastName": "Doe",
   "dob": "1900-01-01",
   "zipCode": "12345",
   "subscriberId": "123456789",
   "policyNumber": "12345"
 },
 {
  "firstName": "Jane",
   "lastName": "Doe",
   "dob": "1900-01-01",
   "zipCode": "54321",
   "subscriberId": "987654321",
   "policyNumber": "54321"
 }
]

同时有单次调用目标API的Shell脚本:

#!/bin/bash

# Rally Forwarder Keys
clientkey=test
apikey=test
#SET apikey=test
# Public URL
url="test"

curl -v -X POST -d '{"firstName":"test","lastName":"test","dob":"1900-01-01","zipCode":"12345","subscriberId":"123456789","policyNumber":"12345"}' -H "Content-type:application/json" "${url}" -H "X-OnePass-API-Key: ${apikey}" -H "X-OnePass-ClientKey: ${clientkey}"

原本用VBA Selenium提交网页表单,但无法适配目标API,本人Shell脚本能力基础,现咨询:

  1. 是否可以通过Shell循环读取JSON文件来调用API?
  2. Shell与Python哪个更适合完成该批量调用任务?

问题解答

1. 可以通过Shell循环读取JSON文件调用API

完全可行,核心依赖jq工具解析JSON数组,逐个提取用户数据作为curl请求体。示例脚本如下:

#!/bin/bash

clientkey=test
apikey=test
url="test"

# 用jq将JSON数组拆分为单行用户数据,循环发送请求
jq -c '.[]' users.json | while read -r user_data; do
  curl -X POST \
    -H "Content-type:application/json" \
    -H "X-OnePass-API-Key: ${apikey}" \
    -H "X-OnePass-ClientKey: ${clientkey}" \
    -d "${user_data}" \
    "${url}"
  # 可选:添加延时避免请求过于频繁触发限流
  sleep 1
done

说明:

  • 需要先安装jq工具(Linux发行版可通过apt install jq或yum install jq安装)
  • jq -c '.[]' users.json会把数组内的每个对象转为紧凑单行格式,方便循环读取
  • 移除了-v参数减少冗余日志,调试时可重新添加

2. Python更适合完成该批量任务

对比Shell方案,Python有以下核心优势:

  • 错误处理更灵活:可轻松捕获API请求失败(如非200状态码),实现重试逻辑,或记录失败数据后续处理
  • 代码可读性与维护性更高:复杂逻辑(如并发请求、数据校验)的代码结构更清晰,后续修改成本低
  • 无需额外依赖外部工具:内置json库解析数据,requests库发送HTTP请求比curl更简洁
  • 扩展性强:后续如需添加数据预处理、结果统计、批量并发等功能,Python能快速实现

Python示例代码:

import json
import requests
import time

clientkey = "test"
apikey = "test"
url = "test"

# 读取JSON文件
with open("users.json", "r") as f:
    users = json.load(f)

headers = {
    "Content-type": "application/json",
    "X-OnePass-API-Key": apikey,
    "X-OnePass-ClientKey": clientkey
}

for user in users:
    try:
        response = requests.post(url, json=user, headers=headers)
        response.raise_for_status()  # 触发HTTP错误异常
        print(f"成功提交用户:{user['firstName']} {user['lastName']}")
    except Exception as e:
        print(f"提交用户失败 {user['firstName']} {user['lastName']}: {str(e)}")
        # 可选:将失败数据写入文件以便后续处理
        with open("failed_users.json", "a") as f:
            json.dump(user, f)
            f.write("\n")
    time.sleep(1)

即使你Shell基础薄弱,Python这段代码逻辑直白,学习和调试成本很低,更适合处理这类批量数据交互任务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:25:26