

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# JSONPath パスの使用
<a name="amazon-states-language-paths"></a>

**ステートの管理とデータの変換**  
[変数を使用したステート間のデータ受け渡し](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 構造内の別の値の参照によるフィルタリングはサポートされていません。
+ `@`、`,`、`:` および `?` の演算子はサポートされていません。

例えば、if 状態入力データには次の値が含まれます。

```
{
  "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) フィールドを使用してフラットな配列に変換できます。このフィールドを並列ステートまたはマップステートの定義に含めて、これらのステートの結果を操作できます。

配列を平坦化するには、次の例のように `ResultSelector` フィールド内で `[*]` の構文を使用します。

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

配列をフラット化する方法を示す例については、以下のチュートリアルの*ステップ 3* を参照してください。
+ [Step Functions での Lambda 関数を使用したバッチデータの処理](tutorial-itembatcher-param-task.md)
+ [Step Functions で Lambda 関数を使って個々のデータ項目を処理する](tutorial-itembatcher-single-item-process.md)