我们有一个系统以一种相当奇怪的方式返回时间序列——在一个带有分隔的
Values
和 TimeStamps
的单个对象中,例如:
[
{
"Location": "a2a127e8-0000-0000-0000-5dd95f33203b/1",
"Keyinfo": {
"Name": "Temperature"
},
"Values": [
20.4627780914307,
20.4127216339111,
20.3624877929688
],
"TimeStamps": [
"2023-06-21T00:57:54+06:00",
"2023-06-21T04:38:02+06:00",
"2023-06-21T04:52:33+06:00"
]
}
]
完整的测试示例https://pastebin.com/raw/TdtqdGM3
使用任何编程语言(例如,使用代理或其他中间件)修复它都非常简单,但我想继续使用通过 JSON API 数据源的直接连接。
是否可以通过一次或多次转换将其变成所需的形式?使用内置工具或其他插件。有自定义编码的插件吗?
grafana version 10.0.0
既然我们谈论的是JSON,我们可以尝试使用Jsonata这样强大的工具。因此,我们可以采用支持 Jsonata 的数据源插件,例如 JSON API 插件。
然后对于给定的示例,我们可以尝试将单个对象转换为多个迭代对象,例如时间戳:
(
/* Remember mattering values in variables */
$location := Location;
$values := Values;
$name := Keyinfo.Name;
/* Loop over timestamps */
TimeStamps ~> $map(function($v, $i){
/* $v - is an iterating objects (timestamps) */
/* $i - is incrementing index */
{
"Location": $location,
"Name": $name,
"TimeStamp": $v,
"Value": $values[$i]
}
})
)
粘贴代码的完整示例:https://try.jsonata.org/os1cm_IWU
因此,我们的结果中有一个对象列表,我们必须从该框架中提取所需的值,如下所示: