如何从 WSO2 Enterprise Integrator 中的 JSON Payload 中提取密钥名称

How to extract key names from JSON Payload in WSO2 Enterprise Integrator

我正在使用 WSO2 EI 通过 webhook 从物联网中获取数据。

核心负载格式是这样的:

{"frm_payload": "AQDPAkMEAAAFBQcOPg==",
      "decoded_payload": {
        "humidity": 67,
        "light": 0,
        "motion": 5,
        "temperature": 20.7,
        "vdd": 3646
      }

我希望能够做的是 transform/pivot 将其转换为名称和值对的数组,以便提取到我的 SQL 数据库中,例如:

{
    "Sensors": [{
            "SensorName": "humidity",
            "SensorData": 67
        },
        {
            "SensorName": "light",
            "SensorData": 0
        },
        {
            "SensorName": "motion",
            "SensorData": 5
        },
        {
            "SensorName": "temperature",
            "SensorData": 20.7
        }, {
            "SensorName": "vdd",
            "SensorData": 3646
        }
    ]
}

但是我不一定知道传入的 JSON 对的键名。 例如。如果我添加一个将开始报告 'distance' 的新传感器,我不想修改我的调解器以专门查找有效载荷中的 'distance',而是采用该键名并将其用作'SensorName'

的值

我认为,对于您的情况,最简单的方法是使用 ScriptMediator,如下所示:

<script language="js">
<![CDATA[
   var message = mc.getPayloadJSON();
   var decoded_payload = message.decoded_payload;
   var sensorsArr = [];
   for (var keyval in decoded_payload){
      sensorsArr.push({"SensorName": keyval, "SensorData": decoded_payload[keyval] });
   }
   var payload = {"Sensors": sensorsArr};                        
   mc.setPayloadJSON(payload);]]>
</script>

作为输出,您将得到您正在寻找的内容。