web-dev-qa-db-ja.com

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
Ryan R

-iオプションは、JSON形式ではないhttp応答ヘッダーがcurlに含まれることを意味します。これが解析エラーの原因ですが、指定したjsonを指定すると、[]を使用して配列を反復するように指示する必要があります。

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

代わりに(そしてIMOより直感的に) json を使用:

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

さらに、json(1)には-Hオプションがあり、http応答ヘッダーを無視するため、json -Ha idを使用できます。

7
jesse_b