数据需要转换

问题描述 投票:0回答:1

我们有一个系统以一种相当奇怪的方式返回时间序列——在一个带有分隔的

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 grafana jsonata
1个回答
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

因此,我们的结果中有一个对象列表,我们必须从该框架中提取所需的值,如下所示:

粘贴代码的最终结果:

© www.soinside.com 2019 - 2024. All rights reserved.