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

如何在Amazon States Language中用JSONata合并Lambda返回与状态输入?

AWS Step Function Lambda任务:输入输出合并与字段覆盖实现

要实现调用Lambda后,将返回的sensed-colour转换为根级colour并覆盖原字段,同时保留输入的所有其他内容,你可以利用ASL的ResultSelector结合JSONata的$merge函数来完成,具体实现如下:

完整ASL状态定义

{
  "Comment": "调用Lambda并合并输入输出,覆盖colour字段",
  "StartAt": "ProcessColour",
  "States": {
    "ProcessColour": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:YourColourSensorLambda",
      "ResultSelector": {
        "$merge": [
          "$$",
          { "colour": "$['sensed-colour']" }
        ]
      },
      "ResultPath": "$",
      "End": true
    }
  }
}

关键逻辑解释

  • $$:在Task状态的JSONata表达式中,代表传入该Task的原始输入数据,会完整保留所有原有字段(比如示例中的id、metadata等)
  • $:代表Lambda函数的返回结果,这里从中提取sensed-colour字段,映射为根级的colour
  • $merge:JSONata的合并函数,会将第二个对象中的字段覆盖第一个对象的同名字段,同时保留第一个对象的其他所有内容,完美满足"合并+覆盖"的需求

示例验证

输入数据

{
  "id": "sensor-001",
  "colour": "initial-blue",
  "metadata": {
    "timestamp": "2024-05-20T10:00:00Z"
  }
}

Lambda返回结果

{
  "sensed-colour": "detected-red"
}

最终输出

{
  "id": "sensor-001",
  "colour": "detected-red",
  "metadata": {
    "timestamp": "2024-05-20T10:00:00Z"
  }
}

常见问题规避

  • 若之前用单纯JSONPath方案得到嵌套结构,通常是因为错误使用了ResultPath将Lambda结果存入子字段(比如$.lambdaOutput),而没有直接合并到根级
  • 若JSONata方案仅保留转换后的字段,是因为没有使用$merge结合原始输入($$),仅返回了转换后的单个字段对象

内容的提问来源于stack exchange,提问作者Sean B. Durkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:16:14