JSONPathリクエスト構文

Teradata® Database JSONデータ型

brand
Software
prodname
Teradata Database
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1150-162K-JPN

JSONPathを使用して、JSONインスタンスの一部分についての情報を要求できます。目的のエンティティには、名前と値のペア、オブジェクト、配列、配列の構成要素、値などの、JSONインスタンスの任意の部分が該当します。またいくつかのJSON関数およびメソッドは、JSONPathによりフォーマットされた文字列を入力として受け入れ、指定されたエンティティで実行します。

JSONPathの原理は、XMLのXPathの原理に似ています。

Teradataは構文の完全な妥当性検証を行なわないので、不正なクエリー文字列によって望ましくない結果が生じる場合があります。Teradataは次の妥当性検証のみを行ないます。
  • '$'ルートの文字が存在することを確認します。
  • 次の文字の省略を検証します。
    • 任意の';'文字
    • 3つ以上の連続した'.'文字。例: '…'

構文

以下に、JSONPath構文をhttp://goessner.net/articles/JsonPath/にあるJSONPath仕様に指定されているように示します。

















構文要素

$
ルート オブジェクトまたは要素。
children
下降演算子('.'または'.. ')の後に子の指定またはオプションが続きます。
child specification
  • すべてのオブジェクトまたは要素に一致するワイルドカード('* ')。
  • 必要に応じて、特定のオブジェクトまたは要素および関連オプションの名前を指定する文字列。
options
インデックス、式、またはフィルタ。
integer
符号付き整数。
expression
このコンテキストでは、LENGTHは現在のJSON配列の長さであり、配列内の要素の数と等しくなります。
@
現在のオブジェクトまたは要素。
filter
フィルタ(スクリプト)式を適用します。
element_string
要素の名前を指定する文字列。
=~ string
文字列比較式。

例: JSONPath構文の要素

この例では、以下のJSONインスタンスを使用してJSONPath構文の特定の要素を示します。対応するテーブルには、構成要素や使用例についての説明を示しています。

{
    "customer" : "CustomerName",
    "orderID" : 3,
    "price" : "$100000.00",
    "items" :
       [
          { "ID" : 1, "name" : "disk", "amt" : 10 },
          { "ID" : 2, "name" : "RAM", "amt" : 20 },
          { "ID" : 3, "name" : "monitor", "amt" : 30 },
          { "ID" : 4, "name" : "keyboard", "amt" : 40 },
          { "ID" : 5, "name" : "camera", "amt" : 50 },
          { "ID" : 6, "name" : "button", "amt" : 60 },
          { "ID" : 7, "name" : "mouse", "amt" : 70 },
          { "ID" : 8, "name" : "pen", "amt" : 80 }
       ]
}
JSONPath 説明 例の説明 結果
$ ルート オブジェクト/要素 $.customer 顧客の名前 CustomerName
@ 現在のオブジェクト/要素 $.items[(@.length-1)] この順序での最後の項目。

この文脈で'length'キーワードを使用すると、現在のJSON配列の長さとして解釈され、JSON配列のプロパティとして扱われます。このような解釈は、'length'が'@.'構文の直後に置かれる場合に限って行なわれます。'length'という単語が式でそれ以降に置かれる場合は('@.firstChild.length'など)、何らかのエンティティのプロパティとしてではなく、そのエンティティの子の名前として解釈されます。

{"ID":8,"name":"pen","amt":80}
.. 再帰的な降下 $..name すべての項目名 ["disk","RAM","monitor", "keyboard","camera","button","mouse","pen"]
* ワイルドカード

すべてのオブジェクト/要素(名前を問わない)

$.items[0].* 順序の最初の項目のすべての記述 [1,"disk",10]
[ ] ネイティブ配列演算子 $.items[0] 最初の項目 {"ID":1,"name":"disk","amt":10}
[start,end] インデックスの一覧 $.items[0,1] 最初の2つの項目 [{"ID":1,"name":"disk","amt":10},

{"ID":2,"name":"RAM","amt":20}]

[start:end:step] 配列スライス演算子

startを指定しない場合、デフォルトは最初のインデックスです。

endを指定しない場合、デフォルトは最後のインデックスです。

stepを指定しない場合、デフォルトは1のステップです。

$.items[0:4:2] 1~5(最後のインデックスを含まない)の2ステップごとのすべての項目(つまり、項目1と3) [{"ID":1,"name":"disk","amt":10},

{"ID":3,"name":"monitor","amt":30}]

?( ) フィルタ(スクリプト)式を適用します $.items[?(@.amt<50)] 50未満の数量を注文したすべての項目をフィルタします [{"ID":1,"name":"disk","amt":10},

{"ID":2,"name":"RAM","amt":20},

{"ID":3,"name":"monitor","amt":30},

{"ID":4,"name":"keyboard","amt":40}]

( ) スクリプト式、基になるスクリプト エンジンを使用 $.items[(@.length-1)] 順序の最後の項目 {"ID":8,"name":"pen","amt":80}