从curl API请求解析JSON数据

从curl API请求解析JSON数据

我正在使用 Shodan 的 APIhttps://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"

答案1

-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

相关内容