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

Azure Function(Python SDK)如何读取Service Bus消息体中的嵌套值

如何从Azure Service Bus消息体中提取嵌套值

嘿,这个问题其实很容易解决!你只需要把Service Bus消息体的字符串内容解析成Python字典,之后就能像访问普通字典一样获取嵌套的键值对了。下面是具体的步骤和修改后的代码示例:

步骤说明

  • 解析消息体:msg.get_body().decode('utf-8')返回的是字符串格式的JSON,我们需要用json.loads()把它转换成Python字典,这样就能直接通过键来访问内容。
  • 访问嵌套值:对于嵌套结构,只需要通过多层键索引即可,比如parsed_body["外层键"]["内层键"]。
  • 异常处理:建议添加JSON解析的异常捕获,避免因消息体格式错误导致函数崩溃。

修改后的完整代码

import logging
import json
import requests
import azure.functions as func

def main(msg: func.ServiceBusMessage):
    try:
        # 解析消息体为Python字典
        message_body_str = msg.get_body().decode('utf-8')
        parsed_body = json.loads(message_body_str)
        logging.info('Parsed ServiceBus message body: %s', parsed_body)

        # 示例:提取嵌套值(根据你的实际消息结构修改)
        # 假设消息体结构是 {"data": {"user": {"id": 123, "name": "tester"}}}
        user_id = parsed_body["data"]["user"]["id"]
        user_name = parsed_body["data"]["user"]["name"]
        logging.info(f"Extracted user ID: {user_id}, user name: {user_name}")

        # 使用消息体中的数据构造请求payload
        url = 'WebHookURL'
        # 这里可以根据需要从parsed_body中提取字段构造payload
        payload = {
            "userId": user_id,
            "userName": user_name
        }
        requests.post(url, data=json.dumps(payload), headers={'Content-Type': 'application/json'})

    except json.JSONDecodeError as e:
        logging.error(f"Failed to parse message body as JSON: {e}")
    except KeyError as e:
        logging.error(f"Missing expected key in message body: {e}")

补充说明

  • 如果不确定消息体的具体结构,可以先在日志中打印parsed_body,这样就能清楚看到所有键值对的层级关系。
  • 请根据你实际收到的Service Bus消息结构,调整代码中提取嵌套值的键路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:34:06