You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Python SDK Service Bus接收消息JSON序列化报错求助

问题原因
  • receiver.receive_messages() 返回的是 ServiceBusReceivedMessage 类的实例,不是直接的JSON字符串或Python字典,直接将该实例传入json.dumps()会触发序列化不支持的报错。
  • 之前执行print(str(msg))可以输出JSON格式内容,是因为该类重写了__str__方法直接返回消息体的字符串形式,不代表对象本身可以直接被JSON序列化。
  • 代码逻辑存在操作颠倒:json.dumps()的作用是将Python字典转为JSON字符串,而你需要的是把消息体的JSON字符串转为Python字典来提取字段,应该调用json.loads()而非json.dumps()。
解决方法

只需要修改消息解析部分的代码即可:

  1. 先提取ServiceBusReceivedMessage实例的消息体,转为UTF-8编码的字符串
  2. 再用json.loads()将JSON字符串解析为Python字典,即可正常提取Text字段

修改后的核心代码片段:

for msg in received_msgs:
    # 提取消息体转为UTF-8字符串,该写法比str(msg)更稳定,避免特殊编码场景出错
    msg_str = b''.join(msg.body).decode('utf-8')
    # 解析为Python字典
    message = json.loads(msg_str)
    text = message['Text']

    # 后续调用AWS Comprehend的逻辑可以保留,这里还可以优化多余的序列化操作:
    # comprehend.detect_sentiment 本身返回Python字典,无需先dumps再loads,可直接取字段
    result = comprehend.detect_sentiment(Text=text, LanguageCode='en')
    sentiment = result["Sentiment"]
    
    # 后续提取分数、生成输出的原有逻辑保持不变即可

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:39:01