使い方
- JSON文書をJSON文書に貼り付けます。まずは例を使って、ツールを試してください。
- JSONPathクエリの欄に、$で始まるクエリを入力します。フィルターは角かっこに書きます:[[email protected] < 10]。
- 一致の数を読み、次に一致した項目(順番どおり)の表を読みます。各行には一致した項目のパスと値があります。
- メッセージが問題の位置を示す場合は、クエリのその文字を見て、かっこ、引用符、ドットを直してください。
クエリがノードを選ぶ仕組み
クエリは$の後のセグメントの並びです。.storeや[0]のような子のセグメントは、到達した各ノードの子を選びます。..authorのような子孫のセグメントは、そのノードとすべての子孫を訪れてから選びます。1つのセグメントのノードは入力の順序で並び、配列は常にその順序で読まれます(RFC 9535のセクション2.5と2.5.2.2)。
名前のセレクターは、オブジェクトの中でその名前と完全に一致するメンバーだけを選びます。負の添字は配列の末尾から数え、-1は最後の要素です。[1:5:2]のようなスライスは、開始、終了、刻みを取り、刻みが0の場合は何も選びません(セクション2.3.4.2)。
フィルター、関数、ツールが受け付けないもの
フィルター[?...]は、配列やオブジェクトのすべての子を検査します。比較には==、!=、<、<=、>、>=を使い、&&、||、!でテストを組み合わせ、括弧でまとめます。存在しないメンバーはNothingで、2つのNothingは等しいとされます。数値は数値と、文字列は文字列と比べられ、型の異なる値は決して等しくなりません(セクション2.3.5.2)。
関数のlength、count、value、match、searchは、RFC 9535の定義どおりに対応しています。matchとsearchは、RFC 9485のI-Regexpの形式で書かれた正規表現を取り、有効なI-Regexpでないパターンは何も一致しません。配列とオブジェクトのリテラルはこの文法にないため、ツールは受け付けません。また、フィルターの中で関数の結果を単独で使うことも、RFC 9535では型の判定に合わないとされるため、受け付けません。
書店の例
例の文書とクエリ$.store.book[[email protected] < 10].titleでは、10より安い本は1冊目と3冊目です。それらの題名が、下の2つの一致になり、各正規化パスとともに示されます。
| 正規化パス | 値(JSON) |
|---|---|
| $['store']['book'][0]['title'] | "Sayings of the Century" |
| $['store']['book'][2]['title'] | "Moby Dick" |
よくある質問
キーが存在するのに、クエリが何も返さないのはなぜですか?
名前のセレクターは、オブジェクトのメンバーのうち、その名前と完全に一致するものだけを選び、大文字と小文字は区別されます。配列の要素には決して一致しないため、配列には添字かワイルドカードを使ってください。
フィルターで13と"13"が等しくないのはなぜですか?
RFC 9535は、型の異なる値を等しくないと比べます(セクション2.3.5.3)。数値と文字列は別の値なので、文字が同じに見えても、==は偽、!=は真になります。
負の添字は何を選びますか?
負の添字は配列の末尾から数えます。-1は最後の要素、-2はその1つ前です。配列の範囲外の添字は何も選ばず、誤りにはなりません(セクション2.3.3.2)。
フィルターの中に単独のlength(@)があるとツールが拒否するのはなぜですか?
lengthは数値を返し、フィルターには真か偽のテストが必要だからです。[?length(@.title) > 15]のように結果を比べれば、型の判定に合います。
ツールはJSONをサーバーに送りますか?
いいえ。文書はお使いのブラウザがJSON.parseで読み取り、クエリもそこで実行され、何も保存されません。このページはネットワークへの要求を行いません。
出典
- RFC 9535:JSONPath、JSONのクエリ式、セクション1.5、2.3、2.4、2.5、2.7(英語)
- RFC 9485:I-Regexp、相互運用可能な正規表現の形式、セクション3と5.3(英語)
数値と文章の最終確認日:2026年11月10日火曜日。