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

Step Functions调用S3 putObject时Body内容被自动加引号问题求助

解决Step Functions调用S3 putObject时Body带引号的问题

问题原因

Step Functions的AWS SDK集成会自动将任务参数序列化为JSON格式。当直接写Body: Foo时,这个值会被当作JSON字符串处理,最终序列化为带双引号的"Foo"写入S3。

无Lambda的解决方案

不需要额外Lambda,只需修改Body的定义方式,使用表达式语法(Body.$)传递原始字符串:

固定字符串(如示例中的Foo)

将Body改为表达式形式,用单引号包裹字符串:

Put item in export:
  Type: Task
  Resource: arn:aws:states:::aws-sdk:s3:putObject
  Parameters:
    Bucket: my-bucket-1234655
    Key.$: States.Format('export/items/{}.txt', $.item.id)
    Body.$: "'Foo'"  # 用表达式传递原始字符串
    ContentType: text/plain
  ResultPath: null
  Next: ...

动态内容(如状态机中的XML)

如果内容存在于状态机的变量中(比如$.item.xmlContent),直接通过路径引用:

Body.$: "$.item.xmlContent"

这样Step Functions会直接把变量中的原始字符串作为Body,不会进行JSON序列化。

原理说明

使用Body.$表达式时,Step Functions会直接将表达式的结果作为原始字节流传递给S3的putObject API,而不会将其序列化为JSON。这样就能确保写入S3的内容是你预期的纯字符串(或XML),不带额外的双引号。

内容的提问来源于stack exchange,提问作者Alex Jäger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:32:46