如何修改Bash脚本以将API响应本地保存为CSV或JSON
修改Bash脚本以保存API响应为JSON/CSV
一、保存为JSON格式
如果API默认返回JSON响应,你可以直接将curl输出重定向到本地文件,为每个分组生成独立的JSON文件:
#!/bin/bash groups=("group1" "group12" "group123" "group1234" "group12345" "group123456") for group in "${groups[@]}" do # 保留调试信息并写入文件,若不需要调试可去掉 -v 和 2>&1 curl -v https://websitehere.com/api/v2/groups/${group}/details \ -H "Authorization: Bearer PANDA TOKEN HERE" \ > "${group}_details.json" 2>&1 # 仅保存响应内容的简化版 # curl https://websitehere.com/api/v2/groups/${group}/details \ # -H "Authorization: Bearer PANDA TOKEN HERE" \ # > "${group}_details.json" done
说明:
- 修正了数组变量名(避免和循环变量重名)
- 使用
>将API响应(标准输出)写入以分组名命名的JSON文件 2>&1会把curl的调试日志(标准错误)也写入文件,不需要的话可以删除
二、保存为CSV格式
情况1:API支持直接返回CSV
如果目标API允许通过请求头或查询参数指定返回CSV格式,参考以下修改:
#!/bin/bash groups=("group1" "group12" "group123" "group1234" "group12345" "group123456") for group in "${groups[@]}" do # 示例1:通过Accept请求头指定CSV格式 curl https://websitehere.com/api/v2/groups/${group}/details \ -H "Authorization: Bearer PANDA TOKEN HERE" \ -H "Accept: text/csv" \ > "${group}_details.csv" # 示例2:通过URL查询参数指定CSV格式(需API支持) # curl https://websitehere.com/api/v2/groups/${group}/details?format=csv \ # -H "Authorization: Bearer PANDA TOKEN HERE" \ # > "${group}_details.csv" done
情况2:API仅返回JSON,需转换为CSV
如果API只返回JSON,可使用jq工具将JSON转成CSV(需先安装jq,比如sudo apt install jq或brew install jq)。根据你的JSON结构调整表头字段:
#!/bin/bash groups=("group1" "group12" "group123" "group1234" "group12345" "group123456") # 自定义CSV表头,需与JSON响应中的键名一致 headers="id,name,description,member_count" for group in "${groups[@]}" do curl -s https://websitehere.com/api/v2/groups/${group}/details \ -H "Authorization: Bearer PANDA TOKEN HERE" \ | jq -r --arg headers "$headers" ' ($headers | split(",")) as $cols | .[] | [ $cols[] as $col | .[$col] ] | @csv ' > "${group}_details.csv" done
说明:
-s让curl静默执行,不显示进度条- 若JSON响应是单个对象而非数组,需去掉jq命令中的
.[]
内容的提问来源于stack exchange,提问作者Мирослав Бадански
相关产品推荐
相关产品推荐

