我正在撰寫一個代碼,它訂閱一個 MQTT 服務器,并接收一個回應正文,其中包含我將存盤在資料庫中的資訊。我已經成功訂閱,并且我收到了一個回應,但我嘗試決議失敗,以便檢索我需要的資料。我試過JSON.stringify(message)了,它給出了一個不可讀的緩沖區。我也試過JSON.parse(message),回傳[object Object]。決議資料的最佳方法是什么?我還想僅將“資料”屬性中的 4 位數字轉換為 32 位十六進制浮點值,例如“C382”= -260,來自https://babbage.cs.qc.cuny.edu/ieee-754.old/ 32位.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)了,它回傳[object object]。
uj5u.com熱心網友回復:
JSON.parse()僅在輸入為字串時有效
JSON.stringify()僅當輸入是 JavaScript 物件時才有效
傳遞給回呼的message物件都不是,它是一個緩沖區。因此,您需要先將 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);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459236.html
上一篇:如何使硒中只有一個值?
