繁体   English   中英

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

[英]Return python string as the body of HTTP response

我正在将AWS Lambdapython-2.7回复AWS Api Gateway 我的lambda函数应该返回如下所示的响应,但是我正在努力将正确的body形式放入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')

但这也不起作用。

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

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

尝试:

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()创建切换为简写形式(这是一个快速的'n肮脏示例)。 这是输出:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM