Как можно использовать 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", ключ [1]: значение [1]}, {"dateTime": "2019-10-19T12 : 53: 54.043Z ", ключ [2]: значение [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