機能
JSONPath は JSON 用のクエリ言語で、XML における XPath のようなものです。$.store.book[*].title のような式でドキュメントの中をたどり、必要な値を選び出します。このツールは、貼り付けた JSON に JSONPath 式を実行し、一致したものをすべて JSON 配列として表示します。一致した値、その正規化パス(例:$['store']['book'][0]['title'])、またはその両方を選べます。
2024 年に公開された IETF 標準 RFC 9535 に準拠しているため、JavaScript、Java、Python、Go などの最新ライブラリと同じ結果になります。コードに書く前にクエリを試したいとき、フィルターが何も返さない原因を調べたいとき、大きな API レスポンスからいくつかの項目を取り出したいときに便利です。
使い方
- JSON 欄に JSON を貼り付けるか、
.jsonファイルをアップロードするか、サンプル を押して定番の書店ドキュメントを読み込みます。 - JSONPath 式 にクエリを入力します。入力に合わせて結果が更新されます。
- 表示 で、値・パス・パスと値のどれを表示するか選びます。
- 結果をコピーまたはダウンロードします。式に構文エラーがあると、解析に失敗した文字の位置が表示されます。
構文早見表
| 式 | 意味 |
|---|---|
$ | ドキュメントのルート |
.name または ['name'] | オブジェクトのメンバー |
[0]、[-1] | 配列の要素(負の数は末尾から数える) |
[1:3]、[::2] | スライス:開始、終了(含まない)、ステップ |
* | すべてのメンバーまたは要素 |
..name | 任意の深さにある name |
[?@.price < 10] | フィルターが真になる子要素。@ は現在の要素 |
フィルターでは &&、||、! で条件を組み合わせたり、$ でドキュメントの別の部分と比較したり、関数を呼び出したりできます:length(@.tags) > 2、count(@.items[*]) == 0、文字列全体が正規表現に一致するかを調べる match(@.code, '[A-Z]{3}')、文字列のどこかに一致すればよい search(@.title, 'Ring')。
例
サンプルの書店データで、次のクエリは価格が 10 未満の本のタイトルを選びます:
$.store.book[?@.price < 10].title
結果:
["Sayings of the Century", "Moby Dick"]
$..book[?@.isbn].author にすると ISBN を持つ本の著者が、$..price にすると自転車を含む店内のすべての価格が得られます。
よくある質問
› どの JSONPath 構文に対応していますか?
RFC 9535 の標準構文に対応しています。ドット記法とブラケット記法のメンバー名、ワイルドカード、配列インデックス(負のインデックスを含む)、スライス、.. による子孫検索、比較演算子と && || ! を使うフィルター、そして length()・count()・match()・search()・value() 関数です。括弧は単なるグループ化なので、旧来の ?(@.price < 10) という書き方も使えます。
› クエリの結果が空の配列になるのはなぜですか?
空の配列は、式は正しいものの一致するノードがなかったことを意味します。メンバー名(大文字と小文字を区別)や、値が配列かオブジェクトかを確認してください。$..* のような広いクエリで「表示」を「パス」にすると、ドキュメントの中身を確認できます。
› [(@.length-1)] のようなスクリプト式は使えますか?
使えません。スクリプト式は任意のコードを実行するもので、標準にも含まれていません。代わりに負のインデックスを使ってください。[-1] が最後の要素、[-2:] が最後の 2 つです。
› JSON はサーバーに送信されますか?
いいえ。式の解析と評価はページ自身のコードがブラウザー内で行い、何もアップロードされません。