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

能否在AWS Step Functions的Choice状态中使用StringToJson内置函数?

问题:AWS Step Functions Choice节点能否直接使用内置函数解析JSON字符串?

我的场景是从队列获取的payload包含多类信息,关键信息位于body字段中,第一步通过如下Pass状态获取该字段:

"FormatData": {
              "Type": "Pass",
              "Next": "ChooseWhichCampaignToCreate",
              "InputPath": "$[0].body",
              "OutputPath": "$"
},

但该输出是JSON格式的字符串,而非直接的JSON对象。目前我在后续Task状态中通过States.StringToJson($)将其转换为JSON对象:

"CreateSessionInviteCampaign": {
              "Type": "Task",
              "Resource": "arn:aws:states:::lambda:invoke",
              "Parameters": {
                "FunctionName": "Coaching-EmailCampaign-Prepare",
                "Payload.$": "States.StringToJson($)"
              },
              "Next": "ChoseWhichCampaignToPrepare"
},

我正重构流程以增加更多Choice节点,确保每个Lambda仅处理特定范围的任务。查阅规范后发现Choice状态无Parameters字段,但支持InputPath。请问能否在InputPath中使用States.StringToJson($).CampaignType这类内置函数调用?还是必须新增一个Pass状态来转换JSON字符串(如以下示例,我希望避免为此定义基础Lambda):

"JSONIfyOutput": {
                "Type": "Pass",
                "Parameters": {
                    "Payload.$": "States.StringToJson($)"
                },
                "OutputPath": "$"
},

回答

不能直接在Choice状态的InputPath中使用States.StringToJson()这类内置函数调用。

原因在于AWS Step Functions的InputPath仅支持JSONPath表达式,不允许嵌入内置函数(比如States.StringToJson())。内置函数只能在支持Parameter引用的状态中使用,比如Task、Pass、Map等状态的Parameters字段里,或者在OutputPath/ResultPath结合特殊引用的场景,但Choice状态本身没有Parameters字段,也不支持在InputPath中执行函数转换。

因此你必须新增一个Pass状态来完成JSON字符串到JSON对象的转换,之后再在Choice状态中使用JSONPath访问转换后的CampaignType字段。示例如下:

"JSONIfyOutput": {
  "Type": "Pass",
  "Parameters": {
    "$.$": "States.StringToJson($)"
  },
  "Next": "ChooseWhichCampaignToCreate"
},
"ChooseWhichCampaignToCreate": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.CampaignType",
      "StringEquals": "SessionInvite",
      "Next": "CreateSessionInviteCampaign"
    },
    {
      "Variable": "$.CampaignType",
      "StringEquals": "Reminder",
      "Next": "CreateReminderCampaign"
    }
  ],
  "Default": "HandleUnknownCampaignType"
}

上述Pass状态通过"$.$": "States.StringToJson($)"直接将转换后的JSON对象作为整个输出传递给下一个Choice状态,这样Choice节点就能正常用JSONPath访问$.CampaignType进行判断了,无需额外定义Lambda函数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:57:20