返回API网关AWS的有效负载

时间:2018-07-06 20:40:27

标签: python-3.x amazon-web-services aws-lambda api-gateway

我在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网关执行中获得成功消息,但是主体不包含任何内容:(

documentation

有人对我如何解决这个问题有所了解。非常感谢

1 个答案:

答案 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

非常感谢