我试图检索插入到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"
有人有个好主意吗?
答案 0 :(得分:1)
给出显示的JSON,jq查询:
.results[].series[].values[]
产生
[
"2018-01-17T04:15:30Z",
690.1
]
这似乎是您想要的输出,但从不熟悉Influxdb的人的角度来看,这些要求似乎非常不透明,因此您可能需要考虑一个变体,例如:
.results[-1].series[-1].values[-1]
在这种情况下会产生相同的结果。
如果您只想要原子值,只需将[]
附加到上述任一查询中即可。
答案 1 :(得分:1)
卷曲到下方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
所有好: - )