如何在 NodeJS 中解析对 JSON 的 MTTQ 响应

How do I parse an MTTQ response to JSON in NodeJS

我正在编写一个代码,它订阅了一个 MQTT 服务器,并接收到一个响应主体,其中包含我将存储在数据库中的信息。我已成功订阅,并收到了一个响应,但我试图解析该响应失败,以便检索我需要的数据。我试过 JSON.stringify(message) ,它给出了一个不可读的缓冲区。我也试过 JSON.parse(message),returns [object Object]。 解析数据的最佳方法是什么?我还想仅将“数据”属性中的 4 位数字转换为 32 位十六进制浮点值,例如“C382”=-260,来自 https://babbage.cs.qc.cuny.edu/ieee-754.old/32bit.html

回到十进制。

这是一个未经解析的响应体示例。

  {"devId":"493C220223030476","msgType":"rs485ValueRpt"
    "data":"0103046026C382D569","timestamp":"1650447596"}.

这是我的代码

const mqtt = require('mqtt');



 const options={
     port:someport,
    username:'someusername',
    password:'somepassword',
    clientId:"randomnumber"
}



const client= mqtt.connect("mqtt://site.com", options);
var topic_list="sometopic"

client.on('connect',function () {
    client.subscribe(topic_list, function (err, granted) {
 if (err) {
  console.error(err);
  return;
 }
 console.log('Subscribed to topic: ' + topic_list);
});
client.on('message',function(topic, message, packet){

   
    console.log("message is " + JSON.stringify(message));

    console.log("topic is "+ topic);
});
    console.log("connected flag  "+ client.connected);
})

也试过JSON.parse(message),其中returns[object object].

JSON.parse() 仅在输入为字符串时有效

JSON.stringify() 仅在输入为 JavaScript 对象时有效

传递给回调的message对象都不是,它是一个Buffer。因此,您需要先将 Buffer 转换为字符串。

下面应该从消息中获取一个对象,然后将其转换回美化字符串以将其打印出来。

client.on('message',function(topic, message, packet){
    var msgObject = JSON.parse(message.toString())
    console.log("message is " + JSON.stringify(msgObject,'',2));
    console.log("topic is "+ topic);
});