0

我在玩 NodeRed。带有 Tasmota 的 Esp32 发送 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 天的时间寻找解决方案。请帮我。

4

1 回答 1

0

JSONata 来救援!看看这里:

https://try.jsonata.org/gKcGY7Y2_

所以你$keys在一个change节点中做,然后是一个split节点,然后只检查键名是否以 MJ 开头(同样,使用 JSONata):

$contains(payload, /^MJ/)

于 2022-01-23T20:44:02.813 回答