

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

# 使用 JSONPath 路径
<a name="amazon-states-language-paths"></a>

**管理状态和转换数据**  
了解有关[使用变量在状态之间传递数据](workflow-variables.md)和[使用转换数据](transforming-data.md)的信息 JSONata。

在 Amazon States Language中，*路径*是以 `$` 开头的字符串，您可使用该字符串来标识 JSON 文本中的组件。路径遵循[JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)语法，该语法仅在设置`QueryLanguage`为时才可用 JSONPath。在指定 `InputPath`、`ResultPath` 和 `OutputPath` 的值时，可以指定访问输入子集的路径。

如果您的字段名包含任何未包含在 [JsonPath ABNF](https://www.ietf.org/archive/id/draft-ietf-jsonpath-base-21.html#jsonpath-abnf) 规则`member-name-shorthand`定义中的字符，则必须使用方括号表示法。因此，要对标点符号（不包括`_`）等特殊字符进行编码，必须使用方括号表示法。例如 `$.abc.['def ghi']`。

## 引用路径
<a name="amazon-states-language-reference-paths"></a>

*引用路径* 是一种语法存在限制的路径，它只能标识 JSON 结构中的单个节点：
+ 您可以使用句点 (`.`) 和方括号 (`[ ]`) 表示法访问对象字段。
+ 不支持像 `length()` 这样的函数。
+ 不支持非符号的词法运算符，例如 `subsetof`。
+ 不支持按正则表达式或通过引用 JSON 结构中的其它值来进行筛选。
+ 不支持 `@`、`,`、`:` 和 `?` 运算符。

例如，如果状态输入数据包含以下值：

```
{
  "foo": 123,
  "bar": ["a", "b", "c"],
  "car": {
      "cdr": true
  }
}
```

以下引用路径将返回以下内容。

```
$.foo => 123
$.bar => ["a", "b", "c"]
$.car.cdr => true
```

某些状态使用路径和引用路径来控制状态机的流，或者配置状态的设置或选项。有关更多信息，请参阅使用[数据流模拟器对工作流输入和输出路径处理](https://aws.amazon.com/blogs/compute/modeling-workflow-input-output-path-processing-with-data-flow-simulator/)进行建模和[ JSONPath 有效使用AWS Step Functions](https://aws.amazon.com/blogs/compute/using-jsonpath-effectively-in-aws-step-functions/)。

### 展平由数组组成的数组
<a name="flatten-array-of-arrays"></a>

如果状态机中的 [Parallel 工作流程状态](state-parallel.md) 或 [Map 状态工作流程。](state-map.md) 状态返回由数组组成的数组，则可以使用 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 字段将他们转换为一个平面数组。您可以将此字段包含在 Parallel 或 Map 状态定义中，以操纵这些状态的结果。

要展平数组，请在 `ResultSelector` 字段中使用语法：`[*]`，如以下示例所示。

```
"ResultSelector": {
    "flattenArray.$": "$[*][*]"
  }
```

有关演示如何展平数组的示例，请参阅以下教程中的*第 3 步*：
+ [在 Step Functions 中使用 Lambda 函数处理批量数据](tutorial-itembatcher-param-task.md)
+ [在 Step Functions 中使用 Lambda 函数处理各个项目](tutorial-itembatcher-single-item-process.md)