zenet_logo

-株式会社ゼネット技術ブログ-

AWS Step Functionsで使えるデータ変換 ー JSONPathとJSONataの比較

 

はじめに

こんにちは、ゼネットシステム事業部の方です。業務で AWS Step Functions を使ったワークフロー自動化に携わる機会があったので、その際に役立った知識を紹介したいと思います

AWS Step Functionsでは、状態遷移の中で入力データを加工・変換して次のステップに渡すことができます。その際に活用されるのが JSONPathJSONata です。
本記事では、それぞれの特徴を整理し、メリット・デメリットを比較しながら、実際の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、と使い分けるのがおすすめです。

参考資料

docs.aws.amazon.com