无服务器框架Python lambda直接返回JSON

无服务器框架Python lambda直接返回JSON,python,aws-lambda,aws-api-gateway,serverless-framework,serverless,Python,Aws Lambda,Aws Api Gateway,Serverless Framework,Serverless,我试图找出如何使用无服务器框架直接以JSON形式返回响应。 这是AWS上带有Lambda代理集成的函数。所有默认设置。 目标是从python lambda函数中,HTTP响应客户端直接获取一个JSON对象,而不是JSON的字符串序列化 python处理程序与此一样简单 def handle(event, context): log.info("Hello Wold") log.info(json.dumps(event, indent=2))

我试图找出如何使用无服务器框架直接以JSON形式返回响应。 这是AWS上带有Lambda代理集成的函数。所有默认设置。 目标是从python lambda函数中,HTTP响应客户端直接获取一个JSON对象,而不是JSON的字符串序列化

python处理程序与此一样简单

    def handle(event, context):
        log.info("Hello Wold")
        log.info(json.dumps(event, indent=2))
        return {
            "statusCode": 200,
            "body": {"foo": "bar"},
            "headers": {
                "Content-Type": "application/json"
            }
        }
函数如下所示:

    functions:
      report:
        handler: handler.handle
        events:
          - http:
              path: api/mypath
              method: post
              authorizer: aws_iam
通过这些配置,我在Postman中得到的响应主体是:

    {
        "statusCode": 200,
        "body": {
            "foo": "bar"
        },
        "headers": {
            "Content-Type": "application/json"
        }
    }

这很奇怪,为什么我把所有的东西都当成身体?如何正确配置它,以便只获取“真实”的主体?

在使用API网关时,主体需要字符串化

pythonish的
pythonish
方法是将JSON主体传递到
JSON.dumps
函数中

def句柄(事件、上下文):
log.info(“你好,世界”)
log.info(json.dumps(事件,缩进=2))
返回{
“状态代码”:200,
“body”:json.dumps({“foo”:“bar”}),
“标题”:{
“内容类型”:“应用程序/json”
}
}
approach#1 使用json.dumps()将json转换为字符串

导入json
def句柄(事件、上下文):
log.info(“你好,世界”)
log.info(json.dumps(事件,缩进=2))
返回{
“状态代码”:200,
“body”:json.dumps({“foo”:“bar”}),
“标题”:{
“内容类型”:“应用程序/json”
}
}
进近#2 使用lambda集成并避免json.dumps()。但这会将您的输出转换为

{ foo = bar}