Return python 字符串作为 HTTP 响应的主体

Return python string as the body of HTTP response

我正在使用 AWS Lambdapython-2.7 回复 AWS Api Gateway。我的 lambda 函数应该 return 如下所示的响应,但我正在努力将正确的正文形式放入 JSON 响应中:

    return_value = {
        "statusCode": 200,
        "isBase64Encoded": 'false',
        "headers": {"Content-Type": "application/json"},
        "body": {payload['note']}
    }

payload['note']的类型是unicode,所以我不知道在[=18=对面的括号里放什么,因为我是python的新手] 试了很多也搞不明白。我尝试使用以下方法将其转换为字符串:

unicodedata.normalize('NFKD', payload['note']).encode('ascii', 'ignore')

但是也没用

首先,我认为之前将 unicode 字符串转换为 python 字符串是个好主意,因为我不知道您的其余代码是否可以处理 json 中的 unicode。

我认为您的问题与 json 格式有关。如JSON,正文字段应包含键值对。

试试 :

return_value = {
    "statusCode": 200,
    "isBase64Encoded": 'false',
    "headers": {"Content-Type": "application/json"},
    "body": {"note": payload['note']}
}

最好先使用标准 object 构建它,然后在 return 时将其转换为 JSON。例如:

# coding=utf-8

import json

def aws_message(payload):
  message = dict(statusCode=200,
                 isBase64Encoded=False,
                 headers={"Content-Type": "application/json"},
                 body=payload['note'])
  return json.dumps(message)


if __name__=="__main__":
    payload = dict(note='something')
    print(aws_message(payload))

不幸的是,您会注意到我在消息中构建 headers 时从 long-form dict() 创建切换到 short-hand(这是一个快速的 'n 肮脏的例子).这是输出:

C:\Python37\python.exe C:/dev/scratches/scratch_17.py
{"statusCode": 200, "isBase64Encoded": false, "headers": {"Content-Type": "application/json"}, "body": "something"}

如您所见,以易于理解的方式构建 object,然后让 json 库完成所有转换为correctly-formatted 响应。希望对您有所帮助。