

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

在 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/)，以及[有效使用 JSONPathAWS Step Functions](https://aws.amazon.com/blogs/compute/using-jsonpath-effectively-in-aws-step-functions/)。

### 平面化陣列陣列
<a name="flatten-array-of-arrays"></a>

如果狀態機器中的 [平行工作流程狀態](state-parallel.md)或 [映射工作流程狀態](state-map.md) 狀態傳回陣列，您可以使用 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 欄位將陣列轉換為平面陣列。您可以在平行或映射狀態定義中包含此欄位，以操作這些狀態的結果。

若要扁平化陣列，請在 `ResultSelector` `[*]`欄位中使用語法：，如下列範例所示。

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

如需示範如何扁平化陣列的範例，請參閱下列教學課程中*的步驟 3*：
+ [在 Step Functions 中使用 Lambda 函數處理批次資料](tutorial-itembatcher-param-task.md)
+ [在 Step Functions 中使用 Lambda 函數處理個別項目](tutorial-itembatcher-single-item-process.md)