When calling an API, I am returned a json that can be pretty printed with
curl "https://mywebsite.com/api/cars.json&page=1" | jq '.'
Below is a sample output. Seeing as there are two pages of records (112 total entries and only 100 entries showing per page), what command can I use in jq to immediately fetch both pages of data?
{
"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 doesn't fetch pages. You need to fetch pages with multiple curl calls, and then combine the JSON outputs.
For example you could get a JSON array of the combined .item properties:
url=https://mywebsite.com/api/cars.json
jq -s '.[0].items + .[1].items' <(curl "$url&page=1" | jq .) <(curl "$url&page=2" | jq .)
If you don't know in advance the number of pages you'll need, then you'll need to work a bit harder, but it's of course possible.
Get the total entries from the first page:
total=$(curl "$url&page=1" | jq .total_entries)
Compute the number of pages:
((pages = total / 100))
if ((total % 100 > 0)); then
((pages++))
else
And then you can write a loop to download the results page by page,
generate the jq command .[0].items + ... + .[n].items and call jq with it to get the combined JSON array.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With