Curl

從 curl API 請求解析 JSON 數據

  • January 18, 2020

我正在使用 Shodan 的 API https://developer.shodan.io/api來獲取我目前的網路警報。我想用 jq 解析出警報的 id。

捲曲請求是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"

-i選項意味著 curl 將包含非 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) 可以-H選擇忽略 http 響應標頭,因此您可以使用json -Ha id

引用自:https://unix.stackexchange.com/questions/562813