首页 > 解决方案 > 返回 API Gateway AWS 的有效负载

问题描述

我在 Python 3.6 中创建了一个 lambda 函数来将少量记录返回到 API 网关。根据文件的退货标准必须是:

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

但是,我需要返回从列表中缓存并解析为 JSON 格式的数据,以便以所需的格式返回,但它不会通过,显然,我无法将变量分配给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 Gateway 执行中收到成功消息,但正文不包含任何内容:(

在此处输入图像描述

有人知道我怎么能弄清楚这一点,拜托。非常感谢

标签: python-3.xamazon-web-servicesaws-lambdaapi-gateway

解决方案


我终于想通了。问题是,即使我将有效负载的强制转换方法应用于 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

非常感谢


推荐阅读