gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:49:46 24 4
gpt4 key购买 nike

我已经设置了 Azure 事件中心,并从 Python 脚本发送 JSON 格式的 AMQP 消息,并尝试使用流分析将这些消息流式传输到 Power BI。这些消息是来自物联网设备的非常简单的设备事件

Python 代码片段是

msg = json.dumps({ "Hub": MAC, "DeviceID": id, "DeviceUID": ouid, "Signal": text, "Timestamp": dtz }, ensure_ascii=False, encoding='utf8')
message.body = msg
messenger.put(message)
messenger.send()

我已使用 MS 教程中的示例 C# 消息读取器从事件中心读回数据,没有任何问题,输出为:

Message received.  Partition: '2', Data: '??{"DeviceUID": "z_70b3d515200002e7_0", "Signal": "/on?1", "DeviceID": "1", "Hub": "91754623489", "Timestamp": "2016-07-15T07:56:50.277440Z"}'

但是当我尝试测试来自事件中心的流分析输入时,出现错误

诊断:无法将输入事件反序列化为 Json。一些可能的原因:1) 格式错误的事件 2) 输入源配置了不正确的序列化格式

我不确定格式错误的事件是什么意思 - 我假设流分析可以处理通过 AMQP 发送到事件中心的数据?

我看不出 C# 应用程序接收到的 JSON 有任何问题 - 除非 BOM 符号导致问题?

这是我第一次尝试这一切,我搜索了任何类似的帖子但没有结果,所以如果有人能给我指出正确的方向,我将非常感激。

干杯罗布

最佳答案

这是由于客户端 API 不兼容造成的。 Python 使用 Proton 发送 AMQP Value 消息正文中的 JSON 字符串。主体被编码为 AMQP 字符串(AMQP 类型编码字节 + utf8 编码字符串字节)。流分析使用 Service Bus .Net SDK,它将 AMQP 消息公开为 EventData,并且其主体始终是字节数组。对于 AMQP 值消息,它包含 AMQP 类型编码字节,因为没有它们就无法解码以下值。开头的这些额外字节将导致 JSON 序列化失败。

为了实现消息正文的互操作性,应用程序应确保发布者和消费者就其类型和编码达成一致。在这种情况下,发布者应在 AMQP 数据消息中发送原始字节。使用 Proton Python API,您可以尝试以下操作:

message.body = msg.encode('utf-8')

另一个解决方法是在应用程序属性中发送简单类型(例如字符串)。

其他人也遇到了这个问题。 https://github.com/Azure/amqpnetlite/issues/117

关于python - 流分析通过事件中心从 Python 反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38391125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com