JSONPath による JSON クエリ
JSONPath で JSON をクエリ:ワイルドカード、再帰降下、スライス、[?(@.price < 10)] のようなフィルター式に対応。入力中に結果が更新されます。jq 構文ではありません。
$ はルート、.name または ['name'] は子要素、[0] は配列要素、[*] は全要素、.. は任意の深さを検索、[?(@.price < 10)] は絞り込み、[-1:] は最後の要素を表します。
すべてブラウザ内で実行されます。データがアップロードさ れることはありません。
関連ツール
すべて表示JSON クエリ(JSONPath)とは?
JSON クエリツールは、JSON に対して JSONPath 式を評価し、一致するすべての値を JSON 配列として表示します。ワイルドカード、再帰降下、配列のスライス、フィルター式に対応しています。注意:使うのは JSONPath の構文($.store.book[*].title)で、jq のパイプ構文では ありません。
JSON クエリ(JSONPath)の使い方
- JSON 入力 欄に JSON を貼り付けます(または例をクリックすると、サンプルデータも読み込まれます)。
$..priceのような JSONPath 式 を入力します。- 一致した値を出力で確認します。ラベルには一致した件数が表示されます。
- コピー で結果の配列をコピーします。
例
{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}
Query: $.store.book[?(@.price < 10)].title [ "A" ]
JSON クエリ(JSONPath)を使うべき場面
JSONPath を受け付けるツール(API ゲートウェイ、Kubernetes の kubectl -o jsonpath、テストフレームワーク、監視)で使う前に、JSONPath 式をテストするときに使います。パイプ、map、オブジェクトの構築といった jq の機能が必要な場合は、jq 自体を使ってください。それらは未対応です。1 つの正確なパスなら、JSON パスファインダーのほうが簡単です。
JSON クエリ(JSONPath)の仕組み
クエリは jsonpath-plus ライブラリ(Goessner の JSONPath に拡張を加えたもの)で評価されます。$ はルート、.name や ['name'] はプロパティ、[0] はインデックス、[*] はすべての子、.. はあらゆる深さでの検索、[start:end] は配列のスライス(負のインデックスは末尾から数えます)、[?(…)] は @ を現在の要素としたフィルターです。フィルター式は jsonpath-plus の安全な評価器で実行され、比較演算子と論理演算子には対応しますが、任意の JavaScript は実行しません。結果は常に一致の配列で、スペース 2 つのインデントで出力されます。
一般的な使用例
- API レスポンスからすべての価格や ID を抽出する
- API テストや監視ルール用に JSONPath をテストする
- 条件で配列の要素を絞り込む
- kubectl の jsonpath 風のクエリを試作する
セキュリティ注意事項
すべてブラウザ内でローカルに処理され、貼り付けたコードがアップロードされることはありません。
よくある質問
これは jq ですか?
いいえ。これは JSONPath という別のクエリ言語を使います。jq のパイプや関数は未対応です。
結果が常に配列なのはなぜですか?
JSONPath 式は任意の数の値に一致しうるため、すべての一致が配列で返されます。
JSON はサーバーに送信されますか?
いいえ、クエリはブラウザ内で実行されます。
ここで大きな数値の精度は失われますか?
はい、値は JavaScript の数値として評価されるため、2^53 を超える整数はクエリ結果で丸められることがあります。