json - 用jq获取多页json

标签 json bash terminal jq

当调用 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/

相关文章:

java - 获取空对象引用如果我在第三个 Activity 之前启动第二个 Activity (如果我直接从第一个移动到第三个 Activity ,则没有错误)

php - 我应该将访问控制列表序列化为 json 还是数据库表

json - CoffeeScript 中的 package.json 和 bower.json?

java - 在 java 代码中间将参数传递给 bash 文件

linux - 将 grep 结果打印到文件和终端

linux - 仅当输入大于屏幕大小时,如何减少分页?

php - 从数据库编码json

linux - 如何找到行和单词的总和

bash - 找出上次在 bash 中设置环境变量的位置

linux - linux 中的 cat * 命令