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

如何在Step Function任务的Input Path中访问字符串化JSON?

问题解答

1. 能否直接传入event.body给StartExecutionCommand的input参数?

取决于event.body的实际类型:

  • 若Lambda由API Gateway触发,默认event.body本身就是字符串类型(API Gateway会自动将请求体序列化为字符串),这种场景下可以直接传input: event.body,无需额外调用JSON.stringify。但要确保event.body是有效的JSON格式,否则Step Functions后续解析会出错。
  • 若你的event.body已经是解析后的JSON对象(比如自定义了Lambda输入转换规则),则必须用JSON.stringify(event.body)转成字符串后再传入,因为StartExecutionCommand要求input参数必须为字符串类型。

2. 如何访问Lambda传入的字符串化JSON中的特定键值对?

有两种实用方案:

方案一:在Step Functions中直接处理字符串化输入

Step Functions内置了States.StringToJson函数,可先将字符串转成JSON对象,再提取指定字段。注意不能直接在inputPath中使用转换函数,需在Parameters中结合路径表达式处理:

{
  "Type": "Pass",
  "Parameters": {
    "targetSku.$": "States.StringToJson($).product.sku"
  },
  "Next": "YourNextState"
}

这里$代表整个输入字符串,States.StringToJson($)会将其转换为JSON对象,之后即可用product.sku路径提取目标值。

方案二:在Lambda中提前解析并处理

如果不需要将完整请求体传给Step Functions,可在Lambda内先解析字符串,提取需要的字段后再序列化为字符串传入:

// Lambda函数内处理逻辑
const parsedBody = JSON.parse(event.body);
const stepFunctionParams = {
  stateMachineArn: process.env.STEP_FUNCTION_ARN!,
  // 仅传入需要的sku字段,减少Step Functions输入数据量
  input: JSON.stringify({ sku: parsedBody.product.sku }),
  name: `NetSuiteInventorySet${Date.now()}${Math.floor(Math.random() * 1000)}` 
};

await client.send(new StartExecutionCommand(stepFunctionParams));

关于你的报错说明

你尝试的inputPath: JsonPath.stringToJson("$.product.sku")报错,原因是inputPath仅接受字符串类型的JSON路径表达式(比如"$.product.sku"),而JsonPath.stringToJson返回的是CDK的IResolvable类型对象,不符合inputPath的类型要求。换成上述方案一中Parameters结合内置函数的写法即可解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:21