
はじめに
こんにちは、ゼネットシステム事業部の方です。業務で AWS Step Functions を使ったワークフロー自動化に携わる機会があったので、その際に役立った知識を紹介したいと思います。
AWS Step Functionsでは、状態遷移の中で入力データを加工・変換して次のステップに渡すことができます。その際に活用されるのが JSONPath と JSONata です。
本記事では、それぞれの特徴を整理し、メリット・デメリットを比較しながら、実際のStep Functions活用例も紹介します。
JSONPathとは
JSONPath は、JSON形式のデータから特定の要素を取り出すためのクエリ言語です。SQLにおける「WHERE句」のような役割を果たし、シンプルに値を参照するのに向いています。
例: 以下のような入力があるとします。
{
"Summaries": [
{"status": "SUCCEEDED", "id": "job1"},
{"status": "FAILED", "id": "job2"}
]
}
参照したい場合:
"Summaries.$": "$.Summaries"
このように記述することで、Summaries 配列全体を取得できます。
JSONataとは
JSONata は、JSONデータをクエリするだけでなく、加工・変換も行える式言語です。
JSONPathが「参照専用」に近いのに対し、JSONataは「変換・整形」が得意です。
例: Summaries 配列から status が "SUCCEEDED" の id だけを抽出したい場合、以下のように書けます。
"SuccessJobIds": "{% $Summaries[status='SUCCEEDED'].id %}"
結果:
{
"SuccessJobIds": ["job1"]
}
より複雑なロジックや条件分岐をシンプルに書けるのが強みです。
JSONPathとJSONataの比較
| 項目 | JSONPath | JSONata |
|---|---|---|
| 用途 | 値の参照 | 値の参照+加工・変換 |
| 記法 | "$..." で指定 |
"{% ... %}" で囲む |
| 条件分岐 | × | ◎ |
| Step Functions | 入力データの一部を渡す | データを整形して次のステップへ |
補足:練習環境 try.jsonata.org
JSONata を実際に試したいときに便利なのが、練習サイトhttps://try.jsonata.org/D-oRIZ5UFです。
-
左側ペインに JSON データを貼り付け
-
右側に JSONata の式を入力
-
右下に即座に結果が表示
とてもシンプルに動作確認ができます。
サンプル
例えば、以下の JSON があるとします。
右の式を実行すると、「オレンジ色の商品」の合計価格を計算できます。

まとめ
-
JSONPath (
$...): 値の抽出に特化。シンプルで学習しやすい。 -
JSONata (
{% ... %}): 値の抽出+加工が可能。柔軟で強力だが習得が必要。 -
Step Functionsでは、シンプルな参照ならJSONPath、複雑なロジックやデータ整形が必要ならJSONata、と使い分けるのがおすすめです。
