AWS API Gateway请求模板JSONPath匹配含特殊字符值的问题
解决API Gateway集成EventBridge时含点号字段的JSONPath匹配问题
问题原因
你遇到的Source字段为空的问题,是因为JSONPath默认会把.解析为层级分隔符,直接写my.item.key会被当作嵌套字段而非完整的字符串值,导致无法匹配到目标元素。
正确的JSONPath写法
针对tags数组中name值为my.item.key的元素,使用以下两种JSONPath语法都能正确匹配:
单引号包裹目标字符串(最常用的方式)
$.tags[?(@.name == 'my.item.key')].value这里用单引号将
my.item.key括起来,告诉JSONPath把它当作完整的字符串进行匹配,而非层级路径。方括号属性访问语法(兼容更多特殊字符场景)
$.tags[?(@['name'] == 'my.item.key')]['value']通过
@['name']的方式访问字段,同样能避免.被误解析的问题。
在AWS CDK的AWSIntegration中配置示例
如果是在VTL模板里引用这个JSONPath,需要转义单引号,示例如下:
{ "Source": "$input.json('$.tags[?(@.name == \\'my.item.key\\')].value')", "DetailType": "$input.json('$.event.header.eventType.key')", "Detail": "$input.json('$')" }
这样配置后,API Gateway就能正确提取到tags数组中指定name对应的value作为EventBridge事件的Source字段了。
内容的提问来源于stack exchange,提问作者lpbearden
相关产品推荐
相关产品推荐

