使用 Node-RED 中的变量访问 msg.payload 的子字段

问题描述 投票:0回答:1

我可以访问

mqttData = msg.payload.Sum.Thin;

我希望 Sum.Thin 是可变的(也可以是其他东西,比如 Data.Count)。

此变量('payloadConfig')从 txt 文件中作为字符串读取。

我尝试过各种“伎俩”:

    // var payloadConfigObj = { payloadConfig };
    // var payloadConfigObj = new String(payloadConfig);
    var payloadConfigObj = JSON.stringify(payloadConfig);
    node.warn('payloadConfigObj: ' + JSON.stringify(payloadConfigObj) + ', type: ' + typeof (payloadConfigObj));

    // var jsonStr = payloadConfig.replace(/(\w+:)|(\w+ :)/g, function (matchedStr) {
        // return '"' + matchedStr.substring(0, matchedStr.length - 1) + '":';
    // });
    // payloadConfig = JSON.parse(jsonStr); //converts to a regular object


    // object payloadConfigObj = payloadConfig;
    // var payloadConfigObj = eval('({' + payloadConfig + '})');
    // var payloadConfigObj = Object.fromEntries(payloadConfig.split(',').map(i => i.split(':')));
    // const payloadConfigObj = payloadConfig.split('').map(letter => ({ letter: letter }));

    // var payloadConfigObj = JSON.parse(payloadConfig);    BROKE!

    // var payloadConfigObj = {};

    // mqttData = mqttPayload.payloadConfig;
    // mqttData = mqttPayload[payloadConfig];
    // mqttData = mqttPayload[{payloadConfig}];
    // mqttData = mqttPayload.indexOf(payloadConfig);
    // mqttData = mqttPayload['payloadConfig'];
    // mqttData = mqttPayload["payloadConfig"];

    // mqttData = mqttPayload.payloadConfigObj;
    // mqttData = mqttPayload[payloadConfigObj];
    // mqttData = mqttPayload['payloadConfigObj'];
    mqttData = mqttPayload["payloadConfigObj"];
javascript node-red
1个回答
0
投票

您需要将

payloadConfig
拆分为
.
,并为每个部分使用方括号表示法。

例如

msg.payload["data"]["count"]

有一个辅助函数可以为您完成此操作

RED.util.getObjectProperty()

mqttData = RED.util.getObjectProperty(mqttPayload, payloadConfig)
© www.soinside.com 2019 - 2024. All rights reserved.