我正在尝试检索插入到influxdb表中的最后一个值。我需要做的是通过HTTP将其发布到另一个系统。
我想在 bash 脚本中完成所有这些操作,但我对 Python 也持开放态度。
$ curl -sG 'https://influx.server:8086/query' --data-urlencode "db=iotaWatt" --data-urlencode "q=SELECT LAST("value") FROM "grid" ORDER BY time DESC" | jq -r
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "grid",
"columns": [
"time",
"last"
],
"values": [
[
"2018-01-17T04:15:30Z",
690.1
]
]
}
]
}
]
}
我正在努力解决这个问题,将这个值变成我可以使用的干净格式。我真的不想使用 sed,我已经尝试过 jq,但它抱怨数据是字符串而不是索引:
jq: error (at <stdin>:1): Cannot index array with string "series"
有人有好的建议吗?
卷曲到下面jq
的管道
$ your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]'
"grid"
"2018-01-17T04:15:30Z"
690.1
结果可以存储到 bash 数组中并在以后使用。
$ results=( $(your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]') )
$ echo "${results[@]}"
"grid" "2018-01-17T04:15:30Z" 690.1
# Individual values could be accessed using "${results[0]}" and so, mind quotes
都很好:-(
给定显示的 JSON,jq 查询:
.results[].series[].values[]
生产:
[
"2018-01-17T04:15:30Z",
690.1
]
这似乎是您想要的输出,但从不熟悉 influxdb 的人的角度来看,这些要求似乎非常不透明,因此您可能需要考虑一个变体,例如:
.results[-1].series[-1].values[-1]
在这种情况下,会产生相同的结果,因为它发生了。
如果您只需要原子值,则可以简单地将[]
附加到上面的任一查询中。