JSONPath テスター
JSONデータにJSONPath式をリアルタイムでテスト。結果をシンタックスハイライト付きで表示。フィルター・ワイルドカード・再帰下降に対応。無料・ブラウザ内で処理。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
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 に該当する値がないという意味です。