JSONPath テスター

JSONデータにJSONPath式をリアルタイムでテスト。結果をシンタックスハイライト付きで表示。フィルター・ワイルドカード・再帰下降に対応。無料・ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
式は $ で始めます。どちらの入力を変更しても検索します。RFC 9535 のワイルドカード、負の添字、スライス、フィルターに対応します。未対応の構文は文字位置を表示し、空の式は結果を消します。
例
「例」を開いてクエリを選ぶと、式だけを置き換えて現在の JSON を検索します。書店データは再読み込みしません。「例」を閉じても式は変わりません。
初期表示の書店 JSON を編集するか、自分の JSON 値を貼り付けます。入力のたびに検索し、数値は JavaScript の精度で扱います。このツール内で Ctrl+L(Mac は ⌘+L)を押すと、両方の入力と結果を消します。

JSON と JSONPath 式を入力すると、一致した値が表示されます。

結果 一致した値を表示し、正規化パスは表示しません。1 件ならその値、複数なら JSON 配列になります。マッチなしと入力エラーは別のメッセージです。長い結果はこの欄内でスクロールします。 「コピー」は表示中の JSON 全体をコピーします。文字列 1 件の引用符と 2 スペースの字下げも含みます。エラーやマッチなしの場合はコピーできません。失敗したら再度押してください。
詳しいガイドを読む JSONPathテスターオンライン:コードなしでJSONデータをクエリする
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

JSONPath 構文リファレンス(RFC 9535)

  • $ — 文書のルート
  • .key、['key']、["key"] — オブジェクトのメンバー
  • [n]、[-1] — 配列の要素。負のインデックスは末尾から数える
  • [start:end:step] — スライス。例:[0:2]、[1:]、[::-1]
  • [0,2]、['title','price'] — 1 つの角括弧に複数のセレクター。結果はセレクターの順
  • [*]、.* — 配列のすべての要素、またはオブジェクトのすべての値
  • ..key、..[0]、..* — 任意の深さの子孫
  • [?@.price < 10] — フィルター。[?(@.price < 10)] とも書ける
  • [?@.isbn]、[?!@.isbn] — メンバーがある / ない
  • [?@.a.b == 'x' && @.c > $.min] — フィルター内の入れ子のパス、&& || !、$ で始まる絶対パス
  • length()、count()、match()、search()、value() — RFC 9535 が定める 5 つの関数

制限事項

  • RFC 9535 にない構文は「サポートされていない構文」と文字位置を表示します:スクリプト式 [(...)]、=~、in / nin、他のライブラリの ~(メンバー名の取得)などの拡張。
  • $.store.book.length は length という名前のメンバーを選びます。配列にはそのメンバーがないため結果は空です。長さで絞り込むにはフィルター内で length() を使います(例:$[?length(@.book) > 3])。
  • 結果はマッチした値の一覧です。正規化パス($['store']['book'][0] など)は表示しません。
  • オブジェクトのメンバーは JSON テキストに書かれた順で返します。RFC 9535 はこの順序を定めていないため、他の実装では順序が変わることがあります。
  • match() と search() は . を [^\n\r] に置き換えたうえで、u フラグ付きの JavaScript 正規表現として実行します(RFC 9485 §5.3)。JavaScript が受け付けないパターンは false になり、\d や先読みなど JavaScript だけの構文も受け付けます。
  • 数値は JSON.parse で JavaScript の数値になるため、253 を超える整数は比較の前に精度が落ちます。

主な使用シーン

JSONPathはAPIレスポンスからのデータ抽出、kubectl の -o jsonpath 出力テンプレート、 AWS Step Functions の InputPath などで使われます。 ただしそれぞれ方言があり、kubectl は式を波括弧で囲み、Step Functions の ResultPath ではフィルターを使えません。このツールは RFC 9535 に従って解析します。 JSONPath クエリを使いこなすことで、ネストされたJSON構造の処理効率が大幅に向上します。

FAQ

JSONPath とは何ですか?

JSONPath はJSONのクエリ言語で、XMLにおけるXPathに相当します。パス式を使ってJSONドキュメントからノードを選択します。RFC 9535(2024年)で標準化されました。kubectl の出力テンプレート、AWS Step Functions、多くの API テストツールがその方言を使っています。

JSONPath 式の $ は何を意味しますか?

$ はJSONドキュメントのルート要素を指します。すべての有効なJSONPath式は $ で始まる必要があります。単体では $ がドキュメント全体を選択します。その後にセレクターを連結できます(例:$.store.book[0].title)。

配列のすべての要素を選択するには?

配列のキーの後にワイルドカードセレクター [*] を使います。例えば $.store.book[*] は配列内のすべてのbookオブジェクトを返します。さらに各要素に絞り込むことも可能です:$.store.book[*].author はすべてのauthor値を返します。

フィルター式はどう使いますか?

フィルターは [?式] と書き、@ は判定中の要素を指します。RFC 9535 では括弧は省略でき、$.store.book[?@.price < 10] と $.store.book[?(@.price < 10)] は同じです。==、!=、<、<=、>、>= で比較し、&&、||、! で条件を組み合わせ、@.author.name のような入れ子のパスや、$ で始まる文書内の別の値との比較、length()、count()、match()、search()、value() が使えます。

再帰下降(..)とは何ですか?

.. 演算子は現在のノードのすべての子孫を再帰的に検索します。例えば $..author はネストの深さに関係なく、JSONツリー内のすべてのauthorフィールドを検索します。

「サポートされていない構文」と表示されるのはなぜですか?

RFC 9535 で定義されていない構文が式に含まれているため、空の結果を返さずに文字位置を示して止めています。よくある例はスクリプト式 [(@.length-1)]([-1] を使う)、=~ 演算子(match() か search() を使う)、in / nin です。「マッチなし」と表示される場合は、式は正しく、JSON に該当する値がないという意味です。