使用jq获取json的多个页面

rdlzhqv9  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(131)

调用API时,返回一个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
    }...
holgip5t

holgip5t1#

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数组。

mrfwxfqh

mrfwxfqh2#

如果可以下载所有页面并创建一个包含所有条目的数组(很像上面的@janos答案),那么就不需要通过计算生成jq命令,而是可以像jq '[.[].items] | flatten'那样使用flatten

相关问题