【问题标题】:Issue with JSON data receiving in paho MQTT在 paho MQTT 中接收 JSON 数据的问题
【发布时间】:2022-01-01 19:13:28
【问题描述】:

我正在尝试使用 paho-mqtt 在 python 中以 JSON 格式发布和订阅消息。 我可以发布消息,但要订阅特定的键值,我会遇到很多错误。您能帮我找出错误并提供解决方案吗?我正在尝试打印方法的值。

代码:

def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        #print(f"Received `{msg.payload}` from `{msg.topic}` topic") #.decode()
        #topic = msg.topic

        m_decode = str(msg.payload.decode("utf-8", "ignore"))
        print("data Received type", type(m_decode))
        print("data Received", m_decode)

        m_in = json.loads(m_decode)  # decode json data
        print(type(m_in))
        print("method is = ", m_decode["method"])

    client.subscribe(topic_sub)
    client.on_message = on_message

错误信息如下:

Traceback (most recent call last):
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\try1.py", line 76, in <module>
    run()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\try1.py", line 73, in run
    client.loop_forever()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 1756, in loop_forever
    rc = self._loop(timeout)
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 1164, in _loop
    rc = self.loop_read()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 1556, in loop_read
    rc = self._packet_read()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 2439, in _packet_read
    rc = self._packet_handle()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 3033, in _packet_handle
    return self._handle_publish()
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 3327, in _handle_publish
    self._handle_on_message(message)
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\venv\lib\site-packages\paho\mqtt\client.py", line 3570, in _handle_on_message
    on_message(self, self._userdata, message)
  File "C:\Users\Vinod Kumar\PycharmProjects\pythonProject\Flask\try1.py", line 35, in on_message
    m_in = json.loads(m_decode)  # decode json data
  File "C:\Users\Vinod Kumar\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Users\Vinod Kumar\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\Vinod Kumar\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

【问题讨论】:

  • 什么错误?没有看到他们,我们所能做的就是猜测。编辑问题以包含错误消息。
  • on_message 回调的其余输出也很有用。该错误表明您尝试解析的 JSON 格式不正确(第一个字符不是 {),因此查看 m_decode 的值会有所帮助。

标签: python json client mqtt paho


【解决方案1】:

我猜你的代码中有错字:)

def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        #print(f"Received `{msg.payload}` from `{msg.topic}` topic") #.decode()
        #topic = msg.topic

        m_decode = str(msg.payload.decode("utf-8", "ignore"))
        print("data Received type", type(m_decode))
        print("data Received", m_decode)

        m_in = json.loads(m_decode)  # decode json data
        print(type(m_in))
        print("method is = ", m_decode["method"])  # <-- shall be m_in["method"]

    client.subscribe(topic_sub)
    client.on_message = on_message

【讨论】:

  • 错误表明没有走那么远,它无法将字符串解析为JSON对象
  • 哦,是的,你是对的。 @hardillb
猜你喜欢
  • 2021-10-15
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多