我在Python 3.6中创建了一个lambda函数,以将一些记录返回到API网关。根据{{3}}的返回标准必须为:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
但是,我需要返回从列表中缓存并解析为JSON格式的数据,以所需的格式返回,但这种方式并没有通过,显然,我无法将变量分配给body
:< / p>
def lambda_handler(event, context):
if event["httpMethod"] == "GET":
param1 = event["queryStringParameters"]["param1"]
param2 = event["queryStringParameters"]["param2"]
info = redshift_get_output(param1,param2)
payload = json.dumps(info)
print(payload)
outcome = {
"isBase64Encoded": 'false',
"statusCode": 200,
"headers": { "header": "headerValue" },
"body": payload
}
return outcome
像这样运行它时,我会在API网关执行中获得成功消息,但是主体不包含任何内容:(
有人对我如何解决这个问题有所了解。非常感谢
答案 0 :(得分:1)
我终于弄明白了。事实是,即使我将有效载荷的转换方法应用于JSON,返回的字符串也始终在方括号[]
的开头和结尾处出现。
我创建了一个客户替换函数来删除方括号,并将没有[]
的有效负载传递给返回函数。
脚本:
def replace_all(text, dic):
for i, j in dic.items():
text = text.replace(i, j)
return text
def lambda_handler(event, context):
if event["httpMethod"] == "GET":
param1 = event["queryStringParameters"]["param1"]
param2 = event["queryStringParameters"]["param2"]
rep = {"[": "", "]": ""}
info = redshift_get_output(param1,param2)
payload = json.dumps(info)
payload = replace_all(payload,rep)
print(payload)
outcome = {
"isBase64Encoded": 'false',
"statusCode": 200,
"headers": { "header": "headerValue" },
"body": json.loads(payload)
}
return outcome
非常感谢