2017-11-21 6 views
1

とJSONの複数のページを取得し、私はかなりAPIを呼び出すときJQ

curl "https://mywebsite.com/api/cars.json&page=1" | jq '.' 

で印刷することができますJSONを返されています以下のサンプル出力です。 2ページのレコード(合計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 
    }... 
+0

できません。 'jq'はHTTPについて何も知らない。 'curl'はデータを取り出します。 'jq'は' curl'の出力を処理します。 – chepner

+0

APIをチェックして、複数のページをリクエストする方法がないかどうか確認しましたか?あるいは、ページネーションを完全に避けることができますか? – peak

答えて

1

jqページをフェッチしません。 curl呼び出しが複数あるページを取得し、JSON出力を結合する必要があります。あなたは、事前に をあなたが必要とするページ数がわからない場合、あなたは少し難しい作業する必要があります

url=https://mywebsite.com/api/cars.json 
jq -s '.[0].items + .[1].items' <(curl "$url&page=1" | jq .) <(curl "$url&page=2" | jq .) 

: たとえば、あなたは、組み合わさ.itemプロパティのJSON配列を得ることができますそれはもちろん可能です。

最初のページから合計エントリを取得:

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配列を取得します。

関連する問題