Python3 Lambda中如何正确构造JSON取值发送EventBridge事件
问题根因
你遇到Malformated Details错误的核心原因是手动拼接JSON字符串时转义逻辑失效:
testV2是json.dumps()生成的JSON字符串,本身自带双引号,你用字符串拼接把它直接嵌入另一段JSON结构时,内部的双引号没有被正确转义,最终生成的Detail内容完全不符合JSON语法规范。- 直接写入
"testV2"只会得到字面量,是因为你传入的是固定字符串值,不是变量引用。
正确实现方案
绝对不要用字符串拼接的方式构造JSON内容,先把Detail对应的完整Python字典定义好,再统一用json.dumps()做序列化,从根源上避免所有转义问题:
import json import boto3 client = boto3.client('events') def lambda_handler(event, context): testV2_dict = { "K1": event['e1'], "K2": event['e2'] } # 先构造Detail对应的完整Python结构,直接嵌套字典对象 detail_dict = { "testK": "testV", "testK2": testV2_dict } response = client.put_events( Entries=[ { "DetailType": "test", "Source": "test", # 一次性序列化整个Detail结构,自动处理所有转义逻辑 "Detail": json.dumps(detail_dict) } ] ) return response
特殊场景说明
如果你确实需要把testV2这个JSON字符串作为testK2的字符串值(而非嵌套JSON对象),同样不需要手动拼接,先把testV2作为普通字符串值存入Python字典,再统一序列化即可:
testV2 = json.dumps(testV2_dict) detail_dict = { "testK": "testV", "testK2": testV2 } # 序列化后会自动给testV2内部的双引号加转义,生成完全合法的JSON字符串 Detail = json.dumps(detail_dict)
AWS EventBridge的Detail字段强制要求传入合法的JSON序列化字符串,只要你全程用Python原生字典/列表构造数据结构、最后统一做JSON序列化,就不会再碰到格式错误。
内容的提问来源于stack exchange,提问作者Merihan Awod
相关产品推荐
相关产品推荐

