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

2024-10-17 08:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用AWS Lambda和{}回复AWS Api Gateway。我的lambda函数应该返回一个如下所示的响应,但是我在JSON响应中使用了正确的body形式:

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

payload['note']的类型是unicode,所以我不知道在body相反的括号中到底要放什么,因为我是python新手,尝试了很多次,但都没能搞清楚。我试图用以下方法将其转换为字符串:

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

但也没用。在


Tags: lambda函数awsapijsonreturnvaluebody
2条回答

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

我认为您的问题与json格式有关。作为JSON,body字段应该包含键值对。在

尝试使用:

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

最好先使用标准对象构建它,然后在返回时将其转换为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))

不幸的是,您会注意到,在构建消息中的头时,我从长格式dict()创建切换到了简写形式(这是一个快速的脏示例)。输出如下:

^{pr2}$

如您所见,以一种易于理解的方式构建对象,然后让json库将所有转换转换为正确格式的响应是非常简单的。我希望这有帮助。在

相关问题 更多 >