curl APIリクエストでJSONデータを解析する

curl APIリクエストでJSONデータを解析する

ShodanのAPIを使用しています。https://developer.shodan.io/api現在のネットワーク通知を受け取ります。警告IDを解析するためにjqを使用したいと思います。

カールリクエストはcurl -X GET -i https://api.shodan.io/shodan/alert/info?key={API KEY}

このリクエストの出力は、次の形式のjsonデータです。

[
 {
  "name": "Test Alert",
  "created": "2017-01-09T21:53:17.104000",
  "expires": 0,
  "expiration": null,
  "filters": {
   "ip": [
    "198.20.88.870"
   ]
  },
  "id": "HKVGCP1WD79Z7W2T",
  "size": 1
 }
]

以下を使用すると、次のエラーが発生しますcurl -X GET -i https://api.shodan.io/shodan/alert/info?key={API KEY} | jq '.id'

"parse error: Invalid numeric literal at line 1, column 9"

ベストアンサー1

この-iオプションは、カールにJSON形式ではなくhttpレスポンスヘッダが含まれていることを意味します。これが解析エラーの原因ですが、提供されたjsonが与えられた場合は、[]次のように配列を繰り返すように指示する必要があります。

curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | jq '.[].id'

または(私の考えではより直感的です)JSON:

curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | json -a id

また、json(1)には-Hhttpレスポンスヘッダーを無視するオプションがあるため、次のものを使用できます。json -Ha id

おすすめ記事