我将AWS Lambda
与python-2.7
一起使用,并回复了AWS Api Gateway
。我的lambda函数应该返回如下所示的响应,但是我正在努力将正确的主体形式放入JSON响应中:
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')
但是它也不起作用。
答案 0 :(得分:2)
首先,我认为将unicode字符串转换为python字符串是一个好主意,因为我不知道您的其余代码是否可以处理json中的unicode。
我认为您的问题与json格式有关。作为JSON,主体字段应包含键值对。
尝试:
return_value = {
"statusCode": 200,
"isBase64Encoded": 'false',
"headers": {"Content-Type": "application/json"},
"body": {"note": payload['note']}
}
答案 1 :(得分:2)
最好首先使用标准对象进行构建,然后在返回时将其转换为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()的创建切换为简写形式(这是一个快速的'n肮脏示例)。输出如下:
C:\Python37\python.exe C:/dev/scratches/scratch_17.py
{"statusCode": 200, "isBase64Encoded": false, "headers": {"Content-Type": "application/json"}, "body": "something"}
如您所见,以一种易于理解的方式构建对象,然后让json库将所有转换全部转换为格式正确的响应是非常简单的。我希望这会有所帮助。