JSONPath
JSONPathは、XMLに対するXPathのように、JSONデータ構造から情報を抽出するためのクエリ言語です。Apidogで使用されているJSONPathのバージョンは、JSONPath Plusに基づいています。詳細な構文の説明については、提供されたリンクを参照してください。
:::highlight purple
JSONPathに慣れていない場合は、この無料のAIツールを使用して式を生成することができます。
:::
クイックスタート
```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" }
]
}
}
```
```json
$.store.book[0].title
```
この式は「Book 1」を返します。
要するに、この式はルートからstore
オブジェクトを見つけ、book
配列にアクセスし、最初のアイテムを選択して、そのアイテムのtitle
を抽出します。
:::highlight purple 💡
- JSONPathのインデックスは
0
から始まります。 - JSONPath内の文字列はシングルクォートを使用する必要があります。例:
$.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データに基づく一般的な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未満の本 |
//* |
$..* |
再帰的にすべての子ノードに一致 |
:::tip[]
これらの式は、JSONPathテスターを使用して確認できます。検証にはJSONPath Plusを選択してください。
:::
参考文献
Last modified: 13 hours ago