如何在Python的Azure Function中读取并转换HTTP请求Payload
在Azure Function中读取并解析HTTP请求Payload的解决方案
一、先修复Payload的JSON语法错误
你提供的Payload存在多处JSON语法问题,这是解析失败的核心原因:
- JSON要求所有字符串(包括键名)必须用双引号(
"),不能用单引号(') Rows字段里的'{'gt':'3000'}'属于错误嵌套,应改为{"gt":"3000"}join字段里的{Type :'default')括号不匹配,需修正为{"Type":"default"}
修复后的标准JSON Payload如下:
{ "Tables": ["Table_Product", "Table_Sales"], "Cols": { "Table_Product": ["ProdId", "Prod_Name", "Prod_Desc"], "Table_Sales": ["ProdId", "Prod_Sales", "Prod_Qty"] }, "Rows": { "Prod_Sales": {"gt": "3000"} }, "Function": { "join": {"Type": "default"}, "groupby": {"cols": ["ProdId", "Prod_Name", "Prod_Sales"]}, "agg": {"Type": "Sum", "Value": "prod_sales"}, "sortby": {"type": "Asc", "cols": ["prod_sales", "b"]} } }
二、Azure Function中读取解析Payload的Python代码
以下是完整的Python版Azure Function代码,可直接接收HTTP请求并将Payload转换为Python字典结构:
import azure.functions as func import json def main(req: func.HttpRequest) -> func.HttpResponse: try: # 直接读取并解析请求体为Python字典 req_body = req.get_json() # 示例:访问解析后的字段,用于业务处理 target_tables = req_body["Tables"] group_config = req_body["Function"]["groupby"] # 这里添加你的业务逻辑代码 return func.HttpResponse( "Payload解析完成,已转换为Python数据结构", status_code=200 ) except ValueError: # 处理JSON格式错误的情况 return func.HttpResponse( "请求体不是有效JSON格式,请检查Payload", status_code=400 ) except KeyError as e: # 处理字段缺失的情况 return func.HttpResponse( f"Payload缺少必要字段: {str(e)}", status_code=400 ) except Exception as e: # 处理其他异常 return func.HttpResponse( f"解析过程出错: {str(e)}", status_code=500 )
关键注意事项
- 客户端发送请求时必须设置
Content-Type: application/json请求头,否则req.get_json()会执行失败 - 如果客户端发送的是原始字节或文本,可改用
json.loads(req.get_body().decode('utf-8'))手动解析 - 解析后的
req_body是标准Python字典,直接通过键名即可访问对应值,比如req_body["Cols"]["Table_Product"]
内容的提问来源于stack exchange,提问作者Nason Thomas
相关产品推荐
相关产品推荐

