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

为什么AWS Step Functions会对Lambda返回的JSON输出做转义?

问题根因

Lambda与Step Function交互存在默认序列化规则,出现该问题的核心原因是你在Lambda代码中返回的是JSON序列化后的字符串,而非对应语言的原生对象类型:

  • Lambda运行时默认会将返回值做一次JSON序列化再传递给Step Function
  • 本地调试时你直接查看函数返回的字符串,没有经过后续二次序列化处理,因此看起来JSON结构合法
  • Step Function接收到字符串类型的返回值后,会按照JSON规则对字符串做二次序列化:自动在字符串首尾添加双引号,内部的双引号统一转义为\",最终就得到了你看到的异常格式。
解决方法

方法1:Lambda侧直接返回原生对象(推荐)

不要在Lambda代码里手动对结果做JSON序列化,直接返回对应语言的原生对象即可,Step Function会自动完成序列化处理,不会出现二次转义问题:

  • Python代码示例:不要返回json.dumps({"test":60,"test2":"30000","test3":"result1"}),直接返回{"test":60,"test2":"30000","test3":"result1"}
  • Node.js代码示例:不要返回JSON.stringify({test:60,test2:"30000",test3:"result1"}),直接返回{test:60,test2:"30000",test3:"result1"}

方法2:Step Function侧做反序列化(适用于无法修改Lambda代码的场景)

如果Lambda代码无法调整,可以在后续步骤的参数处理中使用States.StringToJson内置函数对转义后的字符串做反序列化,示例配置如下:

"NextStep": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "FunctionName": "你的下游函数ARN",
    "Payload.$": "States.StringToJson($.上一步Lambda返回值对应的字段名)"
  }
}

处理后下游步骤就能拿到正常的JSON结构。


内容的提问来源于stack exchange,提问作者PloniStacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:00