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узел, затем splitnode, затем просто проверьте, начинается ли имя ключа с MJ (опять же, используя JSONata):

$contains(payload, /^MJ/)

Другие вопросы по тегам