JSONPath
クイックスタート
JSONレスポンスの例
次のようなJSONレスポンスがあるとします:
{
"store": {
"book": [
{ "category": "fiction", "author": "Author A", "title": "Book 1" },
{ "category": "reference", "author": "Author B", "title": "Book 2" },
{ "category": "fiction", "author": "Author C", "title": "Book 3" }
]
}
}
データの抽出
配列内の最初のこの式は「Book 1」を返します。
book
のtitle
を抽出するには、次のJSONPath式を使用します: $.store.book[0].title
JSONPath式の説明
式要するに、この式はルートから
$.store.book[0].title
を分解してみましょう:$
: JSONドキュメントのルートノードを指します。基本的に全 体の構造です。store
: ルートノードの下にあるstore
プロパティを指します。book
: store
オブジェクトの下にあるbook
プロパティにアクセスします。これは配列です。[0]
: book
配列の最初の要素を選択します(インデックスは0から始まります)。title
: 配列内の最初の本のtitle
を取得します。store
オブジェクトを見つけ、book
配列にアクセスし、最初のアイテムを選択して、そのアイテムのtitle
を抽出します。0
から始まります。$.store.book[?(@.category=='reference')]
。構文の概要
基本構文
構文 | 説明 |
---|---|
$ | ルートノード |
@ | 現在のノード |
.node または ['node'] | 子ノードにアクセス |
[index] | 配列のインデックス、0 からカウントをサポート |
[start:end:step] | 配列のスライス |
* | ワイルドカード、すべての子ノードに一致 |
.. | 再帰的ワイルドカード、すべての子孫に一致 |
(<expr>) | 動的式 |
?(<boolean expr>) | フィルター条件 |
拡張構文
構文 | 説明 |
---|---|
^ | マッチングアイテムの親にアクセス |
~ | マッチングアイテムの属性名を取得(配列として) |
@null() , @boolean() , @number() , @string() , @array() , @object() | 基本的なJSONタイプを取得 |
@integer() | 整数タイプを取得 |
@scalar() | 複合タイプを取得、undefined や非有限数を受け入れる(JavaScriptオブジェクトをクエリする場合) |
@other() | ユーザー定義のotherTypeCallback と共に使用可能 |
@undefined() , @function() , @nonFinite() | 非JSONタイプ、非JSONのJavaScriptオブジェクトをクエリする場合に使用 |
@path , @parent , @property , @parentProperty , @root | フィルター内のショートハンドセレクター |
` | 残りのシーケンスをエスケープ |
@['...'] , ?@['...'] | フィルター内で属性名の特殊文字をエスケープ |
$.. | すべての親コンポーネントを取得 |
JSONPathの例
例のJSONデータ:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
JSONPathクエリの例
XPath | JSONPath | 結果 |
---|---|---|
/store/book/author | $.store.book[*].author | すべての本の著者 |
//author | $..author | すべての著者 |
/store/* | $.store.* | store の下のすべての子ノード |
/store//price | $.store..price | すべての価格フィールド |
//book[3] | $..book[2] | 3番目の本(0ベースのインデックス) |
//book[last()] | $..book[(@.length-1)] または $..book[-1:] | 最後の本 |
//book[position()<3] | $..book[:2] または $..book[0,1] | 最初の2冊の本 |
//book[isbn] | $..book[?(@.isbn)] | ISBNを持つ本 |
//book[price<10] | $..book[?(@.price<10)] | 価格が10未満の本 |
//* | $..* | 再帰的にすべての子ノードに一致 |