python-3.x - 返回 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 执行中收到成功消息,但正文不包含任何内容:(
有人知道我怎么能弄清楚这一点,拜托。非常感谢
解决方案
我终于想通了。问题是,即使我将有效负载的强制转换方法应用于 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
非常感谢
推荐阅读
- javascript - 从类方法调用发射时的不同行为
- javascript - 无法读取未定义的属性“消息处理程序”
- ios - 如何使用 swift 4.2 在 viewDidload 和 Search 选项中按名称字段执行可编码值?
- hibernate - 为什么 List 类型的 spring data 参数不像其他参数类型那样打印在日志上?
- c++ - 是否有 Linux 等效的 SetupDiGetClassDevs 函数
- java - 休眠一对多将两个外键映射到同一列?
- postgresql - 无法使用 Postgres 数据库配置 hashcorp-vault
- java - Actionbar.removealltabs() 留下标签空间
- angular - 如何将状态值分配给 Angular 组件 [ngrx Store] 中的字符串变量
- javascript - Javascript删除字符并返回字符串