JSONPathを使用して、JSONインスタンスの一部分についての情報を要求できます。目的のエンティティには、名前と値のペア、オブジェクト、配列、配列の構成要素、値などの、JSONインスタンスの任意の部分が該当します。またいくつかのJSON関数およびメソッドは、JSONPathによりフォーマットされた文字列を入力として受け入れ、指定されたエンティティで実行します。
JSONPathの原理は、XMLのXPathの原理に似ています。
- '$'ルートの文字が存在することを確認します。
- 次の文字の省略を検証します。
- 任意の';'文字
- 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} |