API网关响应映射无法访问JSON嵌套子对象问题求解
问题根因
映射规则失效的核心原因是API网关实际接收到的原始集成响应中,最外层output字段是转义后的JSON字符串,不是可直接通过JSONPath读取属性的结构化对象。
你在API网关控制台测试端点时看到的嵌套JSON结构,是控制台自动对字符串类型的output做了反序列化后的可视化展示,并非映射模板实际接收到的原始数据结构。
之前尝试$util.parseJson、$util.escapeJavaScript未生效,本质是字段取值路径错误:没有先准确拿到最外层的字符串值就做解析/转义操作,自然无法读取到内部嵌套属性。你之前写$inputRoot.output返回no data也是同样原因:$input.path("$.output")拿到的是字符串类型值,字符串不存在output属性,模板引擎读取空值就会返回无数据结果。
解决方案
直接将集成响应映射模板替换为以下内容即可,不需要修改后端配置:
## 提取最外层output字段的原始字符串值 #set($rawOutput = $input.path('$.output')) ## 将JSON字符串反序列化为可操作的结构化对象 #set($parsedData = $util.parseJson($rawOutput)) ## 输出内部嵌套的output对象内容 $parsedData.output
配置注意事项
- 提取最外层字段时不要写多余路径层级,原始响应最外层仅存在
output一个键,$.output即可准确拿到完整转义字符串 - 不要对解析完成后的结构化对象调用
$util.escapeJavaScript方法,该方法仅适用于字符串转义场景,处理JSON对象会直接破坏结构 - 配置完成后接口将直接返回你需要的目标结构:
{ "errorCode": "my code", "message": "my message" }
内容的提问来源于stack exchange,提问作者Motomine
相关产品推荐
相关产品推荐

