繁体   English   中英

Python2 与 Python3 - 解析 JSON

[英]Python2 vs Python3 - parsing JSON

我尝试使用 Python 读取 MQTT 消息。 出于调试目的,我最小化了程序。

import paho.mqtt.client as mqtt
import json

def on_connect(client, userdata, flags, rc):
    print("Connected with code  " + str(rc))
    client.subscribe("temperature")

def on_message(client, userdata, message):
    if message.topic == "temperature":
        print("New message received")        
        dhtreadings_json = json.loads(message.payload)
        temperature = dhtreadings_json['temperature']
        print(temperature)

mqttc = mqtt.Client()
mqttc.username_pw_set("user","password")                  
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.connect("192.168.1.133",1883,60)
mqttc.loop_forever()

在 Python 2 下,一切正常:

Python2 中的输出

在 Python3 下,我收到了连接已建立的消息,并被告知收到了一条新消息,仅此而已。 之后没有其他输出:

Python3 中的输出

环境:Raspberry Pi 3B+ 上最新版本的 Raspbian

按照建议,我替换为打印(“收到新消息”,message.payload)。 message.payload 在 Python2 和 Python3 中是相同的。

蟒蛇2:

在 Python2 中打印 message.payload

蟒蛇3:

在 Python3 中打印 message.payload

谢谢!

这是因为在 Python3 中message.payload是一个字节数组,而在 Python2 中它是一个字符串。 (这可以在您发布的图像中看到,因为 Python3 字符串以b'...

更改是向 MQTT 规范靠拢,该规范将所有 MQTT 有效负载视为只是一个集合字节,并且也不对应该使用什么字符集将有效负载转换为字符串做出任何假设。

以下应该适用于 Python3(假设初始 json 是 utf-8 编码)

dhtreadings_json = json.loads(message.payload.decode("utf-8"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM