泛美卫生组织 mqtt 客户端 (mqttws31.js) 和 JSON.parse() 不工作

PAHO mqtt client(mqttws31.js) and JSON.parse() does not work

我正在向 Web 客户端发布简单的 JSON 字符串 {"TMP":"-15.5826"}。消息出现在 message.payloadString 我可以将它打印到 html 但我无法用 JSON.parse() 解析消息。 objdata 未定义..这是主要问题,为了解决这个问题,我首先使用了 JSON.stringify(),这次消息已解析,但 data 仍未定义。 stringify 似乎添加了额外的双引号并使 json 字符串无效。 mqttws31.js 是最新的,broker 是 mosquitto 1.4.4。我应该怎么做才能让 JSON.parse() 工作?

通过 mosquitto 命令发布:mosquitto_pub -t /main/SENSOR -m {"TMP":"-15.5826"}

function onMessageArrived(message) {

    var topic = message.destinationName;
    var payload = message.payloadString;

    $('#ws').prepend('<li class=messagelist>' + topic + ' = ' + payload + '</li>');

    var jsonString = JSON.stringify(payload);

    obj = JSON.parse(jsonString); //parse with extra double quotes
    //obj = JSON.parse(payload);  //does not parse

    var data = obj.TMP;
    alert(data);
};

您需要通过在 JSON 字符串周围使用单引号来防止 shell 在发布期间删除双引号:

mosquitto_pub -t /main/SENSOR -m '{"TMP":"-15.5826"}'

完成后,您可以使用 JSON.parse(payload)(不需要 JSON.stringify())。