ToolConvoyToolConvoyv2.6
DEV

JSONPath エディター — JSONPath 式をテストする

JSON データに対して JSONPath 式を評価します。標準 JSONPath と JSONPath Plus の拡張構文に対応。すべてブラウザ内で動作し、アップロードも不要、回数制限もありません。

● ローカル動作 · タブ内で生成ページ読み込み以降のツールによる通信:0件

JSON Path Evaluator

Evaluate JSONPath expressions against JSON data. First line = JSON, remaining lines = JSONPath expression. Works entirely in your browser.

JSONPath は JSON にとっての XPath のようなものです。つまり、XPath が XML をナビゲートするように、JSON から特定の値を抽出するための問い合わせ言語です。2007 年に Stefan Gössner 氏によって定義され、XPath が XML をナビゲートするのと同じ方法で JSON をナビゲートする手段として生まれ、今日ではテスト・スクリプト・設定ファイルから JSON の値を抽出する標準的な手段となっています。基本構文は、ルートを示す $、オブジェクトのプロパティにアクセスする .key、配列のインデックス指定 [n]、配列の全要素 [*]、任意の深さに一致する再帰下降 .. です。このサブセットだけでほとんどのユースケースをカバーでき、JSONPath Plus の拡張は filter 式・算術演算・少数の関数を追加します。

JSONPath で「直感的ではない」点は、$.a.b.c と $..c の違いです。前者は特定のパス上の c の値に一致します。経路上のいずれかのセグメントが存在しなければ、結果は空になります。後者はドキュメント内の任意の深さの c の値すべてに一致するため、構造を知らなくてもフィールド名の出現箇所をすべて探すのに便利です。代償は精度です。前者は厳格で、パスが欠落していると明確に失敗します。後者は寛容で、想定より多くの一致を返すことがあります。どちらを選ぶかはデータ次第です。スキーマが明確(自社で管理する API)なら厳格な形式が適し、探索的な問い合わせ(未知の API、臨時分析)には再帰的な形式が適します。

最後に受け渡しについて整理します。受け先がシェルスクリプトなら、jq が標準ツールです。jq の構文は基本 JSONPath の厳密なスーパーセットです。受け先が JavaScript や Python のテストであれば、その言語の JSONPath ライブラリが適しています。受け先が設定ファイル(Cypress のテストセレクタ、Postman のテスト)であれば、JSONPath 式そのものが成果物なので、目的のテスト構文にそのまま貼り付けてください。filter 式や関数を必要とする複雑な問い合わせには、JSONPath Plus が広くサポートされている唯一の拡張であり、本ツールはそれをネイティブに評価できます。

広告

使い方

  1. JSON を貼り付ける

    JSON ドキュメントを左側のパネルにドロップしてください。入力中にデータがリアルタイムで解析・検証され、形式が正しくない JSON はインラインでフラグ付けされ、構文エラーの位置が示されます。

  2. JSONPath 式を書く

    JSONPath フィールドに `$.users[*].email` や `$..price` のような式を入力してください。エディターは入力中にリアルタイムで評価を実行し、JSON パネル内で一致したノードをハイライトします。

  3. 結果を確認する

    結果パネルには一致した値が JSON 配列として表示され、一致数と各一致へのパスが併せて表示されます。結果をクリックすると、JSON パネル内の該当位置にスクロールして移動できます。

よくある質問

JSONPath と JSONPath Plus の違いは何ですか?

JSONPath は Stefan Gössner 氏が 2007 年に提唱したオリジナルの仕様です。JSONPath Plus はそれを拡張し、算術演算、filter 式、配列スライスなどオリジナルではサポートされない機能を追加しています。本ツールは両方に対応しており、パーサーは式の構文から方言を自動判定します。

配列内の特定のキーの値をすべて取得するにはどうすればよいですか?

ワイルドカード `[*]` を使用します。`$.users[*].email` の場合、`users` 配列内のすべてのオブジェクトから `email` の値を返します。入れ子の配列に対しては、再帰下降演算子 `..` が任意の深さに一致します。`$..email` はドキュメント内のあらゆる場所の `email` の値を返します。

条件で結果を絞り込めますか?

はい。JSONPath Plus は filter 式をサポートしています。`$.users[?(@.age > 18)]` は 18 歳以上のユーザーのみを返し、`$.items[?(@.price < 10)]` は価格が 10 未満のアイテムのみを返します。filter 式内の `@` は現在の节点を意味します。

どのノードにも一致しない場合はどうなりますか?

結果は空配列となります。結果パネルに `[]` が表示され、一致数は 0 になります。空結果はエラーではなく、式は正しいもののデータ中に一致がなかったということを意味します。これが想定外の場合は、式の構文とデータ構造を確認してください。

length() や min() のような JSONPath 関数はサポートされていますか?

JSONPath Plus は少数の関数をサポートしています。`length()`、`count()`、`match()`、`search()`、`value()`、`keys()`、`min()`、`max()`、`avg()`、`sum()` です。完全な一覧は JSONPath Plus のドキュメントを参照してください。標準 JSONPath はこれらのいずれにも対応していません。

制限事項

  • 対応する JSONPath 方言が限定される本ツールは標準 JSONPath と JSONPath Plus をサポートします。ベンダー固有の拡張(カスタム演算子付きの Goessner JSONPath、XPath 形式の軸など)はサポート対象外です。複雑な式が空の結果を返す場合は、一致数と一致したパスを確認してください。
  • スキーマを認識したフィルタリングは不可filter 式はデータに対するランタイムチェックであり、スキーマを認識した述語ではありません。`?(@.type == 'user')` のような filter は実行時には機能しますが、評価前に JSON Schema との型照合を行うことはできません。
  • ストリーミング評価は不可評価の前に JSON ドキュメント全体をメモリへ読み込みます。数 GB 規模の JSON を扱う場合、UI がフリーズしたり失敗したりする可能性があります。メモリに収まらないドキュメントには、ストリーミング JSON パーサー(ijson、oboe.js など)を使用してください。

プラットフォーム別の注意点

macOS
コマンドライン用途には、簡単な JSONPath であれば `jq '.users[].email'` が標準的な代替手段です。本ブラウザツールは、filter 式・再帰下降・`jq` がサポートしない JSONPath Plus 関数を使う場面で適しています。
Windows
PowerShell の `ConvertFrom-Json` と `Select-Object` を組み合わせれば JSON をナビゲートできます。PowerShell のオブジェクトパイプラインの構文では自然に表現しにくい JSONPath 式(特に再帰下降や filter)では、本ブラウザツールが適しています。
Linux
`jq` は JSONPath クエリの標準的な CLI ツールです。本ブラウザツールは、JSONPath Plus 固有の機能(filter 式・算術・関数)に適しています。これらは素の `jq` ではサポートされないため、そのような用途では `jq` のカスタム関数を使うか、`faudensics/jaq` を利用してください。
Web
完全にクライアントサイドで動作し、ページの読み込み後はオフラインでも動作します。`jq` や Python が利用できない制限された環境で JSONPath 式をテストしたり、ブラウザのタブに取得した API レスポンスを対話的に探索したりする際に便利です。
広告
広告