

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

# ItemsPath （ JSONPath 仅限地图）
<a name="input-output-itemspath"></a>

**管理状态和转换数据**  
本页指的是 JSONPath。Step Functions 最近添加了变量 JSONata ，用于管理状态和转换数据。  
了解如何[使用变量传递数据](workflow-variables.md)和[使用转换数据 JSONata](transforming-data.md)。

在 JSONPath基于状态下，使用该`ItemsPath`字段在提供给`Map`状态的 JSON 输入中选择数组或对象。默认情况下，`Map` 状态将 `ItemsPath` 设置为 `$`，这将选择整个输入。
+  如果`Map`状态的输入是 JSON 数组，则它会对数组中的每个项目运行迭代，将该项目作为输入传递给迭代 
+  如果`Map`状态的输入是 JSON 对象，则它会为对象中的每个键值对运行迭代，并将该键值对作为输入传递给迭代 

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

的值`ItemsPath`必须是[参考路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)，并且该路径的计算结果必须为 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`](input-output-inputpath-params.md#input-output-inputpath) 之后应用 `ItemsPath`。`InputPath` 筛选输出后，它将对状态的有效输入进行操作。

有关 `Map` 状态的更多信息，请参阅以下内容：
+  [Map 状态](state-map.md) 
+ [Map 状态处理模式](state-map.md#concepts-map-process-modes)
+ [使用内联 Map 状态重复操作](tutorial-map-inline.md)
+ [内联 `Map` 状态输入和输出处理](state-map-inline.md#inline-map-state-output)