如何循环处理curl GET请求输出,转存JSON后再转换为CSV文件?
解决多个独立JSON对象转CSV的问题
先修复现有output.json的格式
你现在的output.json里是一堆独立的JSON对象(比如{...}{...}),不是合法的JSON数组,所以在线工具处理不了。用以下命令把它转成合法数组:
sed -i '1s/^/[/; $s/$/]/; s/}{/},{/g' output.json
- 解释:给文件开头加
[,结尾加],把每个对象之间的}{换成},{,这样整个文件就变成一个包含所有对象的JSON数组了。
用jq转成CSV
用jq(Linux/macOS常用的JSON处理工具,没有的话用包管理器装,比如apt install jq或brew install jq)来转CSV,比在线工具靠谱。
假设你的每个JSON对象里要提取的字段是id、name、details.address这类,命令如下:
# 替换成你实际需要的字段 jq -r '.[] | [.id, .name, .details.address] | @csv' output.json > output.csv
- 解释:
.[]:遍历数组里的每个JSON对象[.id, .name, .details.address]:指定要导出的字段,嵌套字段用.分隔@csv:把字段转换成CSV格式-r:输出原始字符串(避免CSV里的字段带多余双引号)
优化原脚本,避免再生成无效JSON
原来的curl命令直接把每个页面的JSON追加到文件,导致格式错误。改成下面的方式,直接生成合法的JSON数组:
TOKEN="value123" # 一次性获取所有页面并合并成数组 curl -k \ --header "Auth-detials: $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ "https://someapi.com/api/details?page%5Bnumber%5D={1..10}" | jq -s '.' > output.json
- 这里
curl的{1..10}会自动展开成10个请求,jq -s '.'把所有返回的JSON对象合并成一个数组,直接生成合法的output.json。
内容的提问来源于stack exchange,提问作者aseb
相关产品推荐
相关产品推荐

