我正在使用 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