JSONPath

jsonpathは、JSONデータを問い合わせるためのPostgreSQLのSQL/JSONパス言語のサポートを実装しています。 これは、SQL/JSON クエリ関数でさらに処理するために、パス・エンジンが JSON データから取得する項目を指定する、解析された SQL/JSON パス式のバイナリ表現を提供します。 SQL/JSONのパス述語と演算子のセマンティクスは、一般的にSQLに従う。 SQL/JSONパス構文は、JavaScriptの規約の一部を使用している:
  • 会員アクセスにはドット(.)が使用される。
  • 角括弧([])は配列アクセスに使用される。
  • SQL/JSON配列は0相対です(通常のSQL配列は1から始まります)。
通常、SQLクエリでは、SQL/JSONパス式はSQL文字列リテラルとして記述されます。 つまり、パス表現は一重引用符で囲む必要がある。 また、値の中に入れたいシングルクォーテーションはすべて二重にしなければならない。 パス式の中には、文字列リテラルを必要とするものがある。 埋め込まれた文字列リテラルはJavaScript/ECMAScriptの規約に従っています:
  • 二重引用符で囲まなければならない。
  • バックスラッシュ・エスケープは、タイプしにくい文字を表すために使用される。
埋め込み文字列リテラルの中に二重引用符を入れるには、'\" と入力しなければならない。 バックスラッシュを取得するには、'\\ と入力しなければならない。
その他の特殊なバックスラッシュ・シーケンスには、JSON文字列で認識されるものがある:
さまざまなASCII制御文字
  • \b
  • \f
  • \n
  • \r
  • \t
  • \v
4-6桁のコードポイントで識別されるUnicode文字の場合
  • \uNNNN
バックスラッシュ構文には、JSONでは認められていない2つのケースもある:
16進数2桁で書かれた文字コードの場合
  • \xNN
1桁から6桁の16進数で書かれた文字コードの場合
  • \u{N...}
パス表現は、パス要素のシーケンスで構成される:
  • JSONプリミティブ型のパス・リテラル:Unicode text、numeric、true、false、null。
  • パス変数。
  • アクセサ演算子。
  • jsonpath演算子やメソッドを使用して、フィルター式を指定したり、パスの評価順序を定義したりすることができる。

jsonpath変数

$
クエリーされるJSONテキスト(コンテキスト・アイテム)を表す変数。
ヴァーネーム
名前付き変数。 この値は、いくつかのJSON処理関数のパラメータ'varsで設定できる。
@
フィルター式におけるパスの評価結果を表す変数。

jsonpathアクセサ

キー
."$varname"
指定されたキーを持つオブジェクト・メンバーを返すメンバー・アクセッサ。 キー名が$で始まる名前付き変数であるか、JavaScriptの識別子の規則を満たさない場合は、文字列リテラルとして二重引用符で囲む必要があります。
.*
現在のオブジェクトの最上位レベルにあるすべてのメンバの値を返すワイルドカード・メンバ・アクセッサ。
.**
現在のオブジェクトの JSON 階層のすべてのレベルを処理し、入れ子レベルに関係なくすべてのメンバ値を返す、再帰的ワイルドカード・メンバ・アクセッサ。 これは標準SQL/JSONのPostgreSQL拡張です。
.**{level}
.**{start_level to end_level}
.**と同じ、 しかし、JSON階層の入れ子レベルに対するフィルターがある。 入れ子のレベルは整数で指定する。 ゼロレベルは現在のオブジェクトに対応する。 最下位のネスティング・レベルにアクセスするには、lastキーワードを使う。 これは標準SQL/JSONのPostgreSQL拡張です。
[添え字、...]
配列要素アクセサ。 subscriptは、'indexまたは 'start_indexから 'end_index の2つの形で与えられる。 最初の形式は、配列の1つの要素をそのインデックスで返します。 2番目の形式は、与えられた'start_indexと'end_indexに対応する要素を含む、インデックスの範囲によってスライスされた配列を返す。
指定された'indexは、整数であることも、単一の数値を返す式であることも可能で、自動的に整数にキャストされる。 ゼロインデックスは配列の最初の要素に対応する。 また、lastキーワードを使って配列の最後の要素を表すこともでき、これは長さが不明な配列を扱うときに便利です。
[*]
すべての配列要素を返すワイルドカード配列要素アクセサ。

SQL/JSONパス言語

XPath式が「SQLXMLアクセスに使われるのと同様に、「SQLJSONパス式は、「JSONデータからどの項目を取り出すかを指定する。

PostgreSQL,パス式は'jsonpathデータ型として実装されています。 jsonpathに記述されている要素を使用することができる。

JSONクエリ関数と演算子は、指定されたパス式を評価のためにパスエンジンに渡します。 式がクエリされたJSONデータにマッチする場合、対応するSQL/JSON項目が返されます。

パス式はSQL/JSONパス言語で記述されます。 算術式や関数を含むことができる。 クエリー関数はこのような式をテキスト文字列として扱うため、指定する式はシングルクォートで囲む必要があります。

パス表現は、'jsonpath で許可される一連の要素で構成される。 パス表現は左から右に評価される。 括弧を使って操作の順序を変えることができる。 評価に成功すると、SQL/JSONシーケンスが生成される。 評価結果は、指定された計算を完了するJSONクエリ関数に返される。

コンテキスト・アイテム(照会するJSONデータ)を参照するには、パス式で「$記号を使用します。 この記号の後に、1つ以上のjsonpathアクセサを付けることができる。 JSON構造をレベルごとに下っていき、コンテキスト・アイテムの内容を取得する。 それに続く各演算子は、前の評価ステップの結果を扱う。

jsonpath演算子とメソッドの詳細については、jsonpathを参照のこと