ItemsPath ( JSONPath 仅限地图) - AWS Step Functions

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

ItemsPath ( JSONPath 仅限地图)

管理状态和转换数据

本页指的是 JSONPath。Step Functions 最近添加了变量 JSONata ,用于管理状态和转换数据。

了解如何使用变量传递数据使用转换数据 JSONata

在 JSONPath基于状态下,使用该ItemsPath字段在提供给Map状态的 JSON 输入中选择数组或对象。默认情况下,Map 状态将 ItemsPath 设置为 $,这将选择整个输入。

  • 如果Map状态的输入是 JSON 数组,则它会对数组中的每个项目运行迭代,将该项目作为输入传递给迭代

  • 如果Map状态的输入是 JSON 对象,则它会为对象中的每个键值对运行迭代,并将该键值对作为输入传递给迭代

注意

只有在工作流中使用从上一个状态传递的 JSON 输入时,才能在分布式 Map 状态下使用 ItemsPath

的值ItemsPath必须是参考路径,并且该路径的计算结果必须为 JSON 数组或对象。例如,考虑 Map 状态的输入,其中包含两个数组,如以下示例所示。

{ "ThingsPiratesSay": [ { "say": "Avast!" }, { "say": "Yar!" }, { "say": "Walk the Plank!" } ], "ThingsGiantsSay": [ { "say": "Fee!" }, { "say": "Fi!" }, { "say": "Fo!" }, { "say": "Fum!" } ] }

在这种情况下,您可以通过 ItemsPath 选择一个数组来指定用于 Map 状态迭代的数组。以下状态机定义使用 ItemsPath 来指定输入中的 ThingsPiratesSay 数组,然后对 ThingsPiratesSay 数组中的每个项目运行 SayWord 传递状态的迭代。

{ "StartAt": "PiratesSay", "States": { "PiratesSay": { "Type": "Map", "ItemsPath": "$.ThingsPiratesSay", "ItemProcessor": { "StartAt": "SayWord", "States": { "SayWord": { "Type": "Pass", "End": true } } }, "End": true } } }

对于嵌套的 JSON 对象ItemsPath,您可以使用在输入中选择特定对象。考虑以下带有嵌套配置数据的输入:

{ "environment": "production", "servers": { "web": { "server1": {"port": 80, "status": "active"}, "server2": {"port": 8080, "status": "inactive"} }, "database": { "primary": {"host": "db1.example.com", "port": 5432}, "replica": {"host": "db2.example.com", "port": 5432} } } }

要遍历 Web 服务器对象,您需要设置ItemsPath$.servers.web

{ "StartAt": "ProcessWebServers", "States": { "ProcessWebServers": { "Type": "Map", "ItemsPath": "$.servers.web", "ItemProcessor": { "StartAt": "CheckServer", "States": { "CheckServer": { "Type": "Pass", "End": true } } }, "End": true } } }

处理输入时,Map 状态在 InputPath 之后应用 ItemsPathInputPath 筛选输出后,它将对状态的有效输入进行操作。

有关 Map 状态的更多信息,请参阅以下内容: