两个Lambda函数间传输JSON时如何正确格式化避免解析报错
问题核心原因
你的接收端代码逻辑完全错了。
AWS Lambda 被同步调用时,运行时会自动把传入的Payload字段里的合法JSON反序列化为Python原生的列表/字典对象,直接作为lambda_handler的event参数传入,根本不需要你再做一次JSON解析。
你看到的单引号格式根本不是传输过程中变了,是你自己写的str(event)把Python原生对象转成了Python自带的字符串表示格式——Python打印字典/列表时默认用单引号包裹键值,这个格式不是合法JSON,你再拿json.loads()去解析这个非JSON字符串,必然触发Expecting property name enclosed in double quotes报错。
你之前试的.encode()、base64.b64encode()全是无效操作,根本没碰对问题根源。
正确实现方式
- 发送端代码不需要改:
json.dumps(sendData)把Python对象序列化为合法JSON字符串传给Payload的写法是完全正确的。 - 接收端只需要删掉两处多余操作即可:
- 不要对
event做str()转换 - 删掉
handle_data里多余的json.loads()步骤
- 不要对
修正后的接收端代码:
def lambda_handler(event, context): print("event: ", event) # event本身就是解析完成的Python结构,直接传入即可 handle_data(event) return { 'statusCode': '200', 'body': 'Saved' } def handle_data(data): # 不需要再做json.loads,data已经是可以直接使用的列表/字典 print(data) write_to_dynamo(data) print("Done")
补充说明
不要多此一举做编码、手动解析流之类的操作。Lambda服务间调用的JSON序列化/反序列化是运行时自动完成的,你只需要保证发送端传的是json.dumps()生成的合法JSON字符串,接收端直接使用传入的event对象即可,不会出现格式错乱问题。
内容的提问来源于stack exchange,提问作者Zog
相关产品推荐
相关产品推荐

