python - AWS Lambda 事件解析出错 - JSON 数据无效
问题描述
所以我对 AWS Lambda 有一个奇怪的问题。我有一个使用 cookie 发送到的端点,但由于某种原因事件 JSON 无效,因为它包含单引号而不是 JSON 规范双引号,这反过来会导致 body = json.loads 异常(event['body']) 所以我求助于使用 ast 进行输入解析:
def lambda_handler(event, context):
body = ast.literal_eval(str(event)['body'])
这是抛出异常:
[ERROR] TypeError: string indices must be integers
Traceback (most recent call last):
File "/var/task/app.py", line 23, in lambda_handler
body = ast.literal_eval(str(event)['body'])
以下是 CloudWatch 中输入事件的样子:
2021-05-23T02:22:33.437+00:00
{'version': '2.0', 'routeKey': 'POST /core', 'rawPath': '/Prod/core', 'rawQueryString': '', 'headers': {'accept-encoding': 'gzip', 'content-length': '994', 'content-type': 'application/json; charset=UTF-8', 'host': 'mrmyi8psq3.execute-api.us-east-2.amazonaws.com', 'user-agent': 'Dart/2.10 (dart:io)', 'x-amzn-trace-id': 'Root=1-60a9bc68-638af3f87db7635e129612a0', 'x-forwarded-for': '106.204.193.37', 'x-forwarded-port': '443', 'x-forwarded-proto': 'https'}, 'requestContext': {'accountId': '246891114792', 'apiId': 'mrmyi8psq3', 'domainName': 'mrmyi8psq3.execute-api.us-east-2.amazonaws.com', 'domainPrefix': 'mrmyi8psq3', 'http': {'method': 'POST', 'path': '/Prod/core', 'protocol': 'HTTP/1.1', 'sourceIp': '106.204.193.37', 'userAgent': 'Dart/2.10 (dart:io)'}, 'requestId': 'fwpgajclCYcEMtg=', 'routeKey': 'POST /core', 'stage': 'Prod', 'time': '23/May/2021:02:22:32 +0000', 'timeEpoch': 1621736552901}, 'body': '{"message":"test message","cookie":"eyJraWQiOiJOVlwvSXB5V0xGblRvTXBVaHhqTUVDUXQ3UWFxOVNxcVUxVkFIa2p4eFwvT3M9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJlNTljZGZhYS05OWY5LTQ3OTAtYWRkZi1lOWM4YTgwMTE1ZWMiLCJhdWFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMl91dGlsM2hYN0kiLCJjb2duaXRvOnVzZXJuYW1lIjoiZTU5Y2RmYWEtOTlmOS00NzkwLWFkZGYtZTljOGE4MDExNWVjIiwiZXhwIjoxNjIxNzQwMTIxLCJpYXQiOjE2MjE3MzY1MjEsImVtYWlsIjoicGF2YW55YWRhdkBob3RtYWlsLmNvbSJ9.kK6NRpgiLNmgrzuB91APy15fvJfDt2FtmZQKvOLQJAK8J522OH9hiD4Sroh_F_DivYO98exseEV99FVuyiAB7I70QpYeZUy2M0OF_VSt9AZ8cM_XUN8gf1NHNQoIJlsRNOcok6hJn4Bp7mYhZuyQmzpFk1Hq9joMcjvHBXa0iGBS6stp-2bVH23yVrrYYeDl0lyUfVLUcwwT3BP7jZDcVDcWpfqZYNR5yU4o7Tw0oZKESNCxIr3Hh1EZGMUJwhb-RsSKb9nMafQYJQ-VtFNRj5rlJGf_M1QYwvli-g82p7C9Kf6SbgsjDYKxsjdxZAyouVaXnaL6QgAOLCEMxopTLA"}', 'isBase64Encoded': False}
任何想法将不胜感激!
解决方案
我认为问题在于您正在评估字符串而不是带有索引的事件。所以而不是
str(event)['body']
它应该是
str(event['body'])
推荐阅读
- php - PHP | 取日期,将其与当前月份进行比较并将其转换为上个月
- python - 将测量数据集添加到卡尔曼滤波器
- three.js - 带陀螺仪的三个 js 摄像头(设备方向事件)
- redis - Redis 中的会话数据 - 键/值或哈希类型?
- python - 如何在我的蛇应用程序中的网格之间填充颜色
- typescript - TypeScript:使用动态减速器时的根减速器类型
- wicket - WicketTester:如何单击鼠标辅助按钮?
- python-3.x - 如何使用 Selenium Python 单击元素?
- javascript - AJAX 调用未在 show.bs.modal 上触发
- git - 为什么 git pull 更改了我的代码而没有为所有更改引发合并冲突?