本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 之后应用 ItemsPath。InputPath 筛选输出后,它将对状态的有效输入进行操作。
有关 Map 状态的更多信息,请参阅以下内容: