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

Azure Function App(Python)解析POST请求JSON字符串报错排查

问题原因与解决方法

错误根源

核心错误是错误转换字节对象为字符串:

  • req.get_body()返回的是字节对象(如b'{"name":"Azure"}'),直接用str()转换会得到带b'...'前缀的字符串,实际内容为"b'{\"name\":\"Azure\"}'",这并非合法JSON格式,导致json.loads抛出解码错误。

两种修复方案

方案1:使用HttpRequest内置的get_json()方法(推荐)

Azure Functions的HttpRequest对象已封装JSON解析的便捷方法,无需手动处理字节转码:

import azure.functions as func
import logging
import json

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="functionAppTest",methods=[func.HttpMethod.POST])
def functionAppTest(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    
    try:
        req_body = req.get_json()
        logging.info(f"Parsed JSON: {req_body}")
        # 返回JSON格式响应,200表示请求处理成功
        return func.HttpResponse(
            json.dumps(req_body.values()),
            mimetype="application/json",
            status_code=200
        )
    except ValueError:
        # JSON解析失败时返回错误提示
        return func.HttpResponse(
            "Invalid JSON request body",
            status_code=400
        )

方案2:手动解码字节对象

若需手动处理请求体,用decode('utf-8')将字节对象转成正确的UTF-8字符串:

import azure.functions as func
import logging
import json

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="functionAppTest",methods=[func.HttpMethod.POST])
def functionAppTest(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    res_b = req.get_body().decode('utf-8')  # 正确解码字节为字符串
    logging.info(f"Request Body: {res_b}")
    
    if res_b:
        try:
            parsed_json = json.loads(res_b)
            logging.info(f"Parsed JSON: {parsed_json}")
            return func.HttpResponse(
                json.dumps(parsed_json.values()),
                mimetype="application/json",
                status_code=200
            )
        except json.JSONDecodeError:
            return func.HttpResponse(
                "Failed to parse JSON",
                status_code=400
            )
    else:
        return func.HttpResponse("Empty request body", status_code=400)

额外注意点

  • 原代码直接返回json.loads(res_b).values()会导致响应格式异常,需用json.dumps()转成JSON字符串,并设置mimetype="application/json"。
  • 状态码400表示客户端错误,解析成功时应使用200表示请求正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:30:01