假设我有3种状态,A ->B→C.假设A的输入包括一个名为names
的字段,它是List类型的,每个元素包含两个字段firstName
和lastName
。状态B将处理A和的输入,并返回一个名为newLastName
的响应。如果我想覆盖names
中的每个元素,以便names[i].lastName = newLastName
在将此输入传递到状态C之前,是否有内置语法来实现这一点?谢谢。
通过三个定义属性来控制传递给下一个任务的事件:ResultPath
和OutputPath
用于离开一个任务,InputPath
用于进入下一个任务。
您必须首先了解状态机如何制作到下一个任务的事件,以及上述3个参数中的每一个参数如何更改它。
您必须至少有Result Path。如果将lambda的输出放在下面,则这是关键。因此,ResultPath="$.my_path"
将导致一个json对象,其顶级键为my_path,其值等于从lambda输出的任何值。
如果这是唯一的属性,它被附加到任何输入上。因此,如果您的输入事件是一个json对象,密钥original_key1
和some_other_key
,您的输出与上面的结果路径将是:
{
"original_key_1": some value,
"some_other_key": some other value,
"my_path": the output of your lambda
}
现在,如果您添加OutputPath,这将切断下一个输出中除了路径之外的所有内容(在添加结果路径之后!)
如果你添加了OutputPath="$.my_path"
,你最终会得到一个json:
{ output of your lambda }
(你的输出最好是一个json可比对象,比如python字典!)
InputPath做同样的事情…而是输入。它切断了除了所描述的路径之外的所有东西,这是唯一被发送到的东西。但是它并没有阻止输入被追加——因此InputPath + ResultPath导致发送到lambda的内容更少,但所有内容都在exit
上。并没有像你描述的那样真正的循环逻辑——任务和状态机定义是静态方向,而不是动态逻辑。
你可以简单地在lambda中处理它。这是首选的方法。然而,如果你这样做,那么你应该使用OutputPath和ResultPath的组合来"切断"输入,在最后返回它之前,用你想要的任何东西替换传入事件的各个字段。