Python 到 Json 反序列化错误

Posted

技术标签:

【中文标题】Python 到 Json 反序列化错误【英文标题】:Python to Json DeserializerError 【发布时间】:2020-09-19 04:21:00 【问题描述】:

我正在尝试使用 IOTHub 遥测从 PLC 读取值并使用 azure 将它们流式传输到 PowerBI。

当我运行代码并能够看到集线器接收到消息时,我能够连接到 PLC 并读取值。但是,流给了我一个错误,上面写着“InputDeserializerError.InvalidData”。我不确定我哪里出错了。请查看下面的代码并建议我如何序列化它。当我删除字符串值并且只运行整数和浮点数时,流会拾取它。

# Define the JSON message to send to IoT Hub.
MSG_TXT = "\"Bin1Load\": %s,\"Bin1Grower\": %s,\"Bin1Variety\": %s,\"Bin1StatedTn\": %.2f,\"Bin1S\": %.3f,\"Bin1CalcV\": %.2f"

def send_confirmation_callback(message, result, user_context):
    print ( "IoT Hub responded to message with status: %s" % (result) )

def iothub_client_init():
    # Create an IoT Hub client
    client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
    return client

def iothub_client_telemetry_sample_run():

    try:
        client = iothub_client_init()
        print ( "IoT Hub device sending periodic messages, press Ctrl-C to exit" )

   
        while True:
            # Build the message with simulated telemetry values.    
            b1load =  comm.Read('Bin01.Content.Load')
            b1grower =  comm.Read('Bin01.Content.Grower')
            b1variety =  comm.Read('Bin01.Content.Variety')
            b1statedton =  comm.Read('Bin01.Content.Stated_Tn')            
            b1s =  comm.Read('Bin01.Content.SG')
            b1calcvol =  comm.Read('Bin01.Content.Calc_Vol')
            msg_txt_formatted = MSG_TXT % (b1loads, b1growers, b1varietys, b1statedton, b1s, b1calcvol)
            message = IoTHubMessage(msg_txt_formatted)``` 

【问题讨论】:

不要尝试使用字符串格式构建 JSON。创建一个字典并使用json.dumps() @KlausD。你可以发布一个答案来结束这个问题。 @KlausD。谢谢你的建议。我创建了一个字典并使用 json.dumps() 来获取字符串数据。它甚至也适用于整数。 我发布答案是因为这对社区有益。 【参考方案1】:

解决方案:

不要尝试使用字符串格式构建 JSON。创建字典并使用 json.dumps()。

【讨论】:

以上是关于Python 到 Json 反序列化错误的主要内容,如果未能解决你的问题,请参考以下文章

反序列化 Json 出现错误“无法反序列化当前 JSON 数组”

Python 序列化与反序列化

Python学习之JSON格式的序列化和反序列化

为啥我不能在 Python 中反序列化带有单引号的 JSON 字符串?

Python Json序列化与反序列化

流分析通过事件中心从 Python 反序列化 JSON