JSONPath 式を使用して JSON からデータをクエリおよび抽出
機能
- 高度なクエリ構文: ワイルドカード (*)、再帰的降下 (..)、配列スライス ([start:end])、フィルター ([?(@.price < 10)])、複数パスセレクターを含む完全な JSONPath 構文をサポート
- パス式テンプレート: 一般的なクエリ用の事前構築テンプレート:ルートアクセス ($)、直接子 ($.key)、配列項目 ($.arr[*])、フィルター項目 ($.arr[?(@.id)])、再帰検索 ($..key)
- リアルタイムプレビュー: 構文ハイライトされた JSON 入出力でクエリを即座に実行、一致パスを表示、結果数を表示し、ソース JSON で一致ノードをハイライト
- 結果エクスポート: クエリ結果を JSON(配列または単一値)、表形式データの CSV、フォーマットされたテキストとしてエクスポート、ワンクリックコピーおよびダウンロードオプション付き
使用方法
- JSON データ入力: クエリしたい JSON データを貼り付けまたはアップロード
- JSONPath 記述: JSONPath 式を入力するか、一般的なパターンのテンプレートを使用
- クエリ実行: クエリを実行して構文ハイライト付きの一致結果を確認
- 結果エクスポート: お好みの形式で抽出されたデータをコピーまたはダウンロード
技術詳細
JSONPath 構文
JSONPath 式は $(ルートオブジェクト)で始まり、ドット表記 ($.property) またはブラケット表記 ($['property']) を使用してアクセスします。子ノードは . セパレータ ($.store.book) を使用し、配列は [index] または [*] をすべての項目に使用します。配列スライス [start:end:step] は [0:3](最初の 3 項目)や [-1](最後の項目)のような範囲を抽出します。再帰的降下演算子 .. はすべてのレベルを検索:$..author はネストの深さに関係なくすべての author プロパティを見つけます。ユニオン演算子 [,] は複数の項目を選択:$[0,2,5] は特定の配列インデックスを取得します。
フィルター式
フィルターは [?(@.condition)] 構文を使用して基準に一致する項目を選択します。@ は反復処理の現在のノードを表します。比較演算子:==、!=、<、<=、>、>=。論理演算子:&& (and)、|| (or)、! (not)。例:[?(@.price < 10)] は価格が 10 未満の項目を選択;[?(@.category == 'fiction' && @.price < 20)] は条件を組み合わせます。正規表現マッチング:[?(@.name =~ /pattern/)] は正規表現でフィルタリング。フィルターは階層全体の比較のために $ でルートを参照できます:[?(@.price < $.maxPrice)]。
実装のバリエーション
JSONPath には構文にわずかな違いがある複数の実装があります:Goessner のオリジナル(JavaScript)、Jayway(Java)、jsonpath-ng(Python)。違いには、フィルター演算子(一部は @ vs $ を使用)、正規表現サポート、スクリプト式、関数拡張が含まれます。一部の実装は集約用に @.length、@.min()、@.max() などの関数を追加します。スクリプト式 [(@.price * @.quantity)] は計算を可能にします。親演算子 ^ と現在のパス ~ はコンテキストを提供します。サポートされている機能と構文の癖については、常にターゲット実装のドキュメントを確認してください。
よくある質問
- 結果が空になるのはなぜですか?
- パスが $ から始まっているか、キー名が正確か、配列インデックスが範囲内か確認してください。まずは単純なパスで段階的に検証しましょう。
- 任意の深さでキーを検索するには?
- 再帰的降下演算子を使います:$..author は階層に関係なく author をすべて見つけます。
- フィルターの書き方は?
- [?(@.price < 10)] のように @ は現在の要素を示します。条件は && / || で組み合わせられます。
- 空配列と null の違いは?
- 空配列は一致が無いこと、null は一致した値が null であることを意味します。元データとパスを確認してください。
- 大きな JSON での性能対策は?
- .. の多用を避け、範囲を絞ってからフィルタしてください。必要に応じてストリーミングやサーバー側処理を検討します。
関連ドキュメント
- JSONPath 仕様 - Goessner - オリジナル JSONPath 提案と構文定義
- JSONPath オンラインエバリュエーター - 式ドキュメント付きインタラクティブ JSONPath テスター
- RFC 9535 - JSONPath 標準 - JSONPath クエリ言語の IETF 標準化作業
- jsonpath-ng ドキュメント - 拡張機能を備えた Python JSONPath 実装
- Jayway JSONPath (Java) - フィルター式を持つ人気の Java 実装