JSONPath は、XML に対する XPath のように、JSON データ構造から情報を抽出するために設計されたクエリ言語です。Apidog では、API レスポンスからの値の抽出、データの検証、動的なテストアサーションの作成に JSONPath が広く使用されています。Apidog で使用される JSONPath のバージョンは、JSONPath Plus に基づいています。より詳細な構文の説明については、提供されているリンクを参照できます。クイ ックスタート#
1
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" }
]
}
}
2
データの抽出
配列内の最初の
book の
title を抽出するには、次の JSONPath 式を使用します。
3
JSONPath 式の説明
式
$.store.book[0].title を分解して見てみましょう。
$: JSON ドキュメントのルートノード、つまり構造全体を指します。
store: ルートノード配下のオブジェクトである store プロパティを指します。
book: store オブジェクト配下の book プロパティにアクセスします。これは配列です。
[0]: book 配列内の最初の要素を選択します(インデックスは 0 から始まります)。
title: 配列内の最初の本の title を取得します。
要約すると、この式はルートから移動し、store オブジェクトを見つけ、book 配列にアクセスし、最初の項目を選択して、その項目の title を抽出します。JSONPath のインデックスは 0 から始まります。
JSONPath 内の文字列には一重引用符を使用する必要があります。例: $.store.book[?(@.category=='reference')]。
構文の概要#
基本構文#
| 構文 | 説明 |
|---|
$ | ルートノード |
@ | 現在のノード |
.node or ['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 JavaScript オブジェクトをクエリする場合に使用される非 JSON 型 |
@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
}
}
}
一般的なクエリ例#
| XPath | JSONPath | 結果 |
|---|
/store/book/author | $.store.book[*].author | すべての本の著者 |
//author | $..author | すべての著者 |
/store/* | $.store.* | store 配下のすべての子ノード |
/store//price | $.store..price | すべての price フィールド |
//book[3] | $..book[2] | 3 冊目の本(0 ベースのインデックス) |
//book[last()] | $..book[(@.length-1)] or $..book[-1:] | 最後の本 |
//book[position()<3] | $..book[:2] or $..book[0,1] | 最初の 2 冊の本 |
//book[isbn] | $..book[?(@.isbn)] | ISBN を持つ本 |
//book[price<10] | $..book[?(@.price<10)] | 価格が 10 未満の本 |
//* | $..* | すべての子ノードに再帰的に一致します |
Apidog でのユースケース#
JSONPath は、Apidog において特に次の用途に役立ちます。レスポンス検証: API レスポンスから特定の値を抽出して正確性を検証します
動的変数: 抽出した値を保存し、後続のリクエストで使用します
テストアサーション: レスポンスデータに基づいて強力なアサーションを作成します
データ抽出: 複雑にネストされた JSON 構造から特定のフィールドを取り出します
参考資料#
Modified at 2026-06-11 07:06:02