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
相关产品推荐
相关产品推荐

