【问题标题】:Can not parse JSON from MQTT Message in Broker无法从 Broker 中的 MQTT 消息解析 JSON
【发布时间】:2020-04-19 07:04:51
【问题描述】:

我正在使用 Mosca 构建一个 MQTT 服务器,并尝试将 MQTT 消息解析为 JSON 以用于数据库存储。

下方“已发布”回调中的代码

server.on('published', (packet, client) => {
    let { payload } = packet;
    if(payload) {
        let payloadString = payload.toString();
        let payloadJson = JSON.parse(payloadString);
        console.log(payloadJson)
    }
});

JSON 字符串示例为:

{"_id":"5e928105156c40000006f9e9","温度":33,"湿度":64.9}

但我在JSON.parse 行收到错误

SyntaxError: JSON 中第 2 位的意外标记 c

我应该如何正确解析此消息?

【问题讨论】:

  • 你能记录下payloadString的实际值并将其添加到问题中吗?
  • 嗨@JoachimIsaksson,解析前的日志是{"_id":"5e928105156c40000006f9e9","temperature":33,"humidity":64.9}上面的JSON String的样本
  • 您在什么平台上运行,使用的默认编码是什么?因为该有效负载缓冲区既可以正确解析为字符串,也可以直接从带有 UTF8 的缓冲区中解析
  • 嗨@hardillb,我正在使用 Arduino 和 ArduinoJson 6 发送消息。我不确定默认编码,但它可能是 UTF8。我有 2 个地方收到消息,分别是代理服务器(Node JS)和移动应用程序(React Native)。我可以解析 React Naitve 上的消息(都在 javascript 中使用 JSON.parse()),但无法在 Node js 中解析
  • 问题是nodejs代码在哪里运行

标签: node.js json mqtt mosca


【解决方案1】:

您的项目似乎正在使用 MongoDB。

我不知道server.emit() 端的代码是什么,因为您没有提供。

但是在从 MongoDB 获取数据之前尝试传入.lean() 会解决你的问题。

类似这样的:

const leanDoc = await MyModel.findOne().lean();

也检查一下:https://mongoosejs.com/docs/tutorials/lean.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多