Serverless Framework Python lambda return JSON 直接

Serverless Framework Python lambda return JSON directly

我正在尝试找出如何 return 响应作为 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 中得到的响应 BODY 是:

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

所以这很奇怪,为什么我把所有东西都当作正文?如何正确配置它以便我只获得 "real" 正文?

使用API 网关

时需要对正文进行字符串化

pythonish 方法是将 JSON 主体传递给 json.dumps 函数。

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

方法 #1

使用 json.dumps() 将 JSON 转换为字符串。

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

方法 #2

使用 lambda 集成并避免 json.dumps()。但这会将您的输出转换为

{ foo = bar}