NodeRed анализирует объект tasmota json
Играю с NodeRed. Esp32 с Tasmota, отправляющим сообщение mqtt, как в следующем примере:
{
"Time": "2021-12-05T20:46:40",
"MJ_HT_V1391ef1": {
"mac": "582d34684ef1",
"Temperature": 22.6,
"Humidity": 50.9,
"DewPoint": 11.9,
"Battery": 100,
"RSSI": -92
},
"MJ_HT_V1385877": {
"mac": "582d31385557",
"Temperature": 22,
"Humidity": 53.3,
"DewPoint": 12,
"Battery": 85,
"RSSI": -86
}
}
Пожалуйста! Как мне получить имена MJ_HT_V1391ef1 и MJ_HT_V1385877, не зная их, а также у json может быть больше похожих объектов, чем только два. Также мне нужно будет получить такую информацию, как MJ_HT_V1391ef1.mac или MJ_HT_V1391ef1.Temperature.
Если я использую что-то вроде
var zprava=msg.payload;
msg.payload=zprava["MJ_HT_V1391ef1"]["Temperature"];
Это работает, и я получаю значение 22,6. Но мне нужно сделать это более динамично. Какой-то цикл, который будет проходить через json?
Я трачу почти 5 дней на поиск решения. Помогите, пожалуйста.
1 ответ
JSONata в помощь! Посмотрите здесь:
https://try.jsonata.org/gKcGY7Y2_
Так что вы делаете
$keys
в
change
узел, затем
split
node, затем просто проверьте, начинается ли имя ключа с MJ (опять же, используя JSONata):
$contains(payload, /^MJ/)