return API 网关 AWS 的负载

return payload for a API Gateway AWS

我在 Python 3.6 中创建了一个 lambda 函数,以便 return 一些记录到 API 网关。根据 documentation 的 return 标准必须是:

{
  "isBase64Encoded" : "boolean",
  "statusCode": "number",
  "headers": { ... },
  "body": "JSON string"
}

但是,我需要 return 从列表中缓存的数据并解析为 JSON 格式以 returned 为所需格式,但显然,它不会通过,我无法将变量分配给 body:

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 网关执行中收到成功消息,但正文不包含任何内容:(

请有人知道我该如何解决这个问题。非常感谢

我终于弄明白了。问题是,即使我将有效负载的转换方法应用到 JSON,returning 的字符串始终在开头和结尾都有方括号 [].

我创建了一个客户替换函数来删除括号并将没有 [] 的有效载荷传递给我的 return 函数。

脚本:

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

非常感谢