当调用 API 时,我返回一个可以 pretty-print 的 json
curl "https://mywebsite.com/api/cars.json&page=1" | jq '.'
下面是一个示例输出。看到有两页记录(总共 112 条记录,每页只显示 100 条记录),我可以在 jq
中使用什么命令来立即获取两页数据?
{
"current_page": 1,
"per_page": 100,
"total_entries": 112,
"items": [
{
"id": 1,
"name": "vehicleA",
"state": "available",
"charge": 100
},
{
"id": 2,
"name": "vehicleB",
"state": "available",
"charge": 75
},
{
"id": 3,
"name": "vehicleB",
"state": "available",
"charge": 50
}...
最佳答案
jq
不获取页面。您需要使用多个 curl
调用获取页面,然后组合 JSON 输出。
例如,您可以获得组合的 .item
属性的 JSON 数组:
url=https://mywebsite.com/api/cars.json
jq -s '.[0].items + .[1].items' <(curl "$url&page=1" | jq .) <(curl "$url&page=2" | jq .)
如果您事先不知道需要的页数, 那么你需要更加努力地工作,但这当然是可能的。
获取第一页的总条目数:
total=$(curl "$url&page=1" | jq .total_entries)
计算页数:
((pages = total / 100))
if ((total % 100 > 0)); then
((pages++))
else
然后你可以写一个循环,一页一页地下载结果,
生成 jq
命令 .[0].items + ... + .[n].items
并用它调用 jq
得到组合的 JSON 数组。
关于json - 用jq获取多页json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47419750/