sql-json-path-expression

SQL/JSON パス式は、JSON 文書のエレメントへのアクセスを定義します。

sql-json-path-expression

構文図を読む構文図をスキップするlaxstrictsql-json-accessor-expression
sql-json-accessor-expression
構文図を読む構文図をスキップする$.json-path-key-name.*array-specifier
array-specifier
構文図を読む構文図をスキップする[number*]
lax または strict
JSON パス・モードを指定します。
lax
現在の JSON 文書のナビゲート時に、以下の構造エラーを含め、特定の構造エラーを許容することを指定します。
  • 配列のネストを自動で解除。
  • 配列として参照された場合に、自動ラップによってスカラー値を単一エレメント配列に変換する。
  • 存在しない項目 (範囲外の配列添字値を含む) の指定。

項目が存在しない場合、SQL/JSON パス式は空ストリングを戻します。空ストリングは、関数の ON EMPTY 節で指定されたオプションに従って処理されます。

strict
指定されたパス式を使用して現在の JSON 文書をナビゲートできない場合に、エラーを報告することを指定します。 エラーは、現在の ON ERROR 節に従って処理されます。
sql-json-accessor-expression
$
SQL/JSON パス式の残りの部分が適用される、コンテキスト項目の開始点を指定します。
json-path-key-name
JSON 文書内のキー:値のペアのキー名を指定します。
*
すべてのキーの値が SQL/JSON シーケンスとして戻されることを指定します。
array-specifier
配列に適用する添字値を指定します。配列の最初のエレメントの添字は 0 です。 指定した添字が範囲外の場合は、エラーと見なされます。
number
配列エレメントを表す、符号なし整数定数。配列の最初のエレメントの添字は 0 です。
*
すべての配列エレメントが選択されることを示します。
以下に示す一部の文字には、SQL/JSON パス式の一部として使用する場合に、特別なセマンティクスが関連付けられています。
.
JSON 文書内の次のレベルに進むために使用します。
*
現在のレベルにあるすべてのキーに一致させるために使用します。
[ および ]
配列の添字を指定するために使用します。

これらの文字を json-path-key-name 内で使用できるようにするには、これらの文字の前に円記号 (¥) エスケープ文字を使用して、これらの文字がキー名の一部であることを示してください。

  1. この例では、以下の JSON ドキュメントに基づいています。
    { "isbn": "123-456-222", "author": [ { "name":"Jones"},{"name","Smith"}]}
    以下の表は、さまざまな SQL/JSON パス式を使用して JSON 文書内の項目にアクセスした結果を示しています。
    パス 一致する数 一致する項目
    $.isbn 1 "123-456-222"
    $.author[0].name 1 "Jones"
    $.author[1].name 1 "Smith"
  2. この例では、以下の JSON ドキュメントに基づいています。
    {
      "person"   : {"firstname":"Fred", "lastname":"Gauss"},
      "where"    : "General Products",
      "friends"  : [ { "name": "Lili","rank": 5 }, {"name": "Hank", "rank": 7} ],
      "work.area": "Finance"
    }
    以下の表は、さまざまな SQL/JSON パス式を使用して JSON 文書内の項目にアクセスした結果を示しています。
    パス 一致する数 一致する項目
    $.person.lastname 1 "Gauss"
    $.friends 1 [ { "name": "Lili", "rank": 5 }, { "name": "Hank", "rank": 7} ]
    $.*.firstname 1 "Fred"
    $.person.* 2 "Fred" および "Gauss"
    $.friends[*] 2 { "name": "Lili", "rank": 5 } および { "name": "Hank", "rank": 7}
    $.friends[*].rank 2 5 および 7
    $.work.area 0  
    $.work¥.area 1 "Finance"
  3. この例では、以下の JSON ドキュメントに基づいています。
    { "a":[{"b1":10}, {"b2":11}], "c":"hi" }
    以下の表は、さまざまな SQL/JSON パス式を使用して JSON 文書内の項目にアクセスした結果を示しています。
    パス 一致する項目 注目すべきこと
    lax $.a.b1 10 'a' の配列エレメントの自動ネスト解除。'a[*]' として扱われます。
    strict $.a.b1 エラー 配列の自動ネスト解除なし。
    lax $.c[0] "hi" 自動ラップによるスカラー値の単一エレメント配列への変換。
    strict $.c[0] エラー 自動ラップによるスカラー値の単一エレメント配列への変換はなし。
  4. 次の例は、JSON_VALUE の動作と JSON_QUERY の動作の違いを示しています。この例では、以下の JSON ドキュメントに基づいています。
    { "a": [1,2], "b": { "c1":1, "c2":2 } }
    
    この例は、以下のパス結果に基づいています。
    パス式 戻される値の数 戻り値
    $.a 1 つ [1,2]
    $.b.* 複数
    1
    2
    以下の表は、さまざまな SQL/JSON パス式を使用して JSON 文書内の項目にアクセスした結果を示しています。
    演算子 $.a $.b.* 注目すべきこと
    JSON_VALUE エラー エラー 配列タイプへのアクセスおよび複数の一致があるためのエラー。
    JSON_QUERY WITHOUT ARRAY WRAPPER [1,2] エラー 配列ラッパーなしで複数の値があるためのエラー。
    JSON_QUERY WITH UNCONDITIONAL ARRAY WRAPPER [ [1,2] ] [1,2] タイプが配列の場合でも、配列ラッパーを使用する必要があります。
    JSON_QUERY WITH CONDITIONAL ARRAY WRAPPER [1,2] [1,2] タイプが配列の場合、配列ラッパーは必要ありません。