You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:09:48