如何从 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>
作为输出,您将得到您正在寻找的内容。
我正在使用 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>
作为输出,您将得到您正在寻找的内容。