如何使用jsonata进行转换:
{
"data": [
{
"dateTime": "2019-10-19T12:53:54.043Z",
"Reactor3.Level": 1.51860072870498,
"Reactor3.Temp": 27.1360543141452
},
{
"dateTime": "2019-10-19T12:55:54.043Z",
"Reactor3.Press": 88.9,
"Reactor3.Temp": 24.1418981047159
}
]
}
变成一系列只包含 {"dateTime":"2019-10-19T12:53:54.043Z", key[1]:value[1]},{"dateTime":"2019-10-19T12 两个键的对象:53:54.043Z",key[2]:value[2]} 如以下:
{
"data": [
{
"dateTime": "2019-10-19T12:53:54.043Z",
"Reactor3.Level": 1.51860072870498
},
{
"dateTime": "2019-10-19T12:53:54.043Z",
"Reactor3.Temp": 27.1360543141452
},
{
"dateTime": "2019-10-19T12:55:54.043Z",
"Reactor3.Press": 88.9
},
{
"dateTime": "2019-10-19T12:55:54.043Z",
"Reactor3.Temp": 24.1418981047159
}
]
}
第一个键始终是 dateTime,其他键会有所不同,我想按 dateTime 分解所有其他键/值?这里的 Reactor3.Level、Reactor3.Temp、Reactor3.Press 只是会改变的示例。
编辑:在下面,我添加了我的问题的更通用版本。我本质上是在寻找一个 JSONata 查询来转换这个输入:
{
"data": [
{
"TS": "TS1",
"V1": 1,
"V2": 2
},
{
"TS": "TS2",
"V2": 9,
"V3": 8,
"V4": 7
}
]
}
其中键“TS”是每组中的第一个键,其他键会有所不同。并将其转换为以下输出:
{
"data": [
{
"TS": "TS1",
"V1": 1
},
{
"TS": "TS1",
"V2": 2
},
{
"TS": "TS2",
"V2": 9
},
{
"TS": "TS2",
"V3": 8
},
{
"TS": "TS2",
"V4": 7
}
]
}
[已解决] SteveR 在下面解决了我的问题,我只想在此处添加一个 Node-RED “有效负载”友好版本的解决方案:链接:http ://try.jsonata.org/HJCjoHxoS
负载修改 JSONata:
payload.$ ~> | $ | { "data": data.(
$obj := $;
$key := "dateTime";
$keys($obj)[$ != $key].{
$key : $lookup($obj, $key),
$: $lookup($obj, $)
}
) } |
再次感谢@SteveR