JSONPath再帰的降下演算子(..) — 深い探索
JSONPathの再帰的降下演算子 (..) を使って、JSONドキュメントのすべてのレベルを検索する方法を学びます。正確なパスを知らなくても深くネストされた値を見つけられます。
Operators
詳細な説明
JSONPathにおける再帰的降下
ダブルドット演算子 .. はJSONドキュメントの深いスキャンを実行し、すべてのネストレベルを通じてマッチするプロパティ名や配列要素を検索します。JSONPathの最も特徴的な機能の一つです。
構文
$..propertyName // 任意の深さで "propertyName" を検索
$..[0] // 任意の深さのすべての配列の最初の要素
$..* // ドキュメント全体のすべての値
動作の仕組み
深くネストされたJSONに対して:
$..nameは任意の深さにあるすべてのnameプロパティを返します。$..sizeはネストレベルに関係なく、すべてのサイズ値を返します。$..teams[0].nameは各部門の最初のチーム名を返します。
一般的なパターン
- すべてのIDを検索:
$..id— レスポンス全体に散らばった識別子を収集するのに便利です。 - すべての配列を検索:
$..[*]と型チェックの組み合わせ。 - 出現回数のカウント:
$..keyを評価し、結果の長さを確認します。
パフォーマンスに関する考慮事項
再帰的降下はドキュメントツリー全体を走査するため、非常に大きなJSON構造(メガバイト単位のデータ)では遅くなる場合があります。パフォーマンスが重要なアプリケーションでは、構造がわかっている場合は明示的なパスを推奨します。
比較表
| 式 | 結果 |
|---|---|
$.company.name |
"Acme"(ルートレベルのみ) |
$..name |
すべての深さのすべての name 値 |
$..teams..name |
チーム名のみ(スコープ付き降下) |
ユースケース
複雑で深くネストされたJSONドキュメントから正確なパスを知らなくても、またはハードコーディングせずに特定のフィールドを抽出する必要がある場合に使用します。例えば、ネストされたAPIレスポンスからすべてのエラーメッセージを収集したり、商品カタログからすべての価格フィールドを見つけたりする場合に活用できます。