JSON Path Tester
JSONPath式をテストし、JSONデータから必要な値を抽出するツールです。APIレスポンスの解析とデータ分析に必須のツール!
Result will appear here...
Common Patterns
Root
$Root object
All Books
$.store.book[*]All books in store
First Book
$.store.book[0]First book
Last Book
$.store.book[-1]Last book
Book Titles
$.store.book[*].titleAll book titles
Books < $10
$.store.book[?(@.price < 10)]Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]Books with ISBN
All Prices
$.store..priceAll prices (recursive)
Syntax Guide:
$- Root object@- Current object.or[]- Child operator..- Recursive descent*- Wildcard[start:end]- Array slice[?(<expr>)]- Filter expression
JSONPathとは?
JSONPathは、JSONデータ構造内の値をクエリするための式言語です。XPathがXMLで行うように、JSONPathはJSONから特定のデータを抽出できるようにします。
主要な構文
基本演算子
| 演算子 | 説明 | 例 |
|---|---|---|
$ | ルートオブジェクト | $ |
@ | 現在のオブジェクト(フィルタ内) | @.price |
. または [] | 子要素 | $.store.book |
.. | 再帰的検索 | $..price |
* | ワイルドカード | $.store.* |
[n] | 配列インデックス | $.store.book[0] |
[start:end] | 配列スライス | $.store.book[0:2] |
[?(<expr>)] | フィルタ式 | $..book[?(@.price < 10)] |
配列のインデックス指定
// 最初の要素
$.store.book[0]
// 最後の要素
$.store.book[-1]
// 範囲(0からインデックス2の前まで)
$.store.book[0:2]
// すべての要素
$.store.book[*]
フィルタ式
// 価格が10未満の本
$.store.book[?(@.price < 10)]
// ISBNがある本
$.store.book[?(@.isbn)]
// カテゴリがfictionの本
$.store.book[?(@.category === 'fiction')]
// タイトルに特定の単語が含まれる本
$.store.book[?(@.title.includes('Moby'))]
実際の使用例
APIレスポンスからのデータ抽出
// APIレスポンス
{
"users": [
{ "id": 1, "name": "John", "active": true },
{ "id": 2, "name": "Jane", "active": false },
{ "id": 3, "name": "Bob", "active": true }
]
}
// アクティブなユーザーのみを抽出
$.users[?(@.active === true)]
// すべてのユーザー名
$.users[*].name
ネストされたデータの探索
// 複雑なJSON
{
"company": {
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "Alice", "salary": 100000 },
{ "name": "Bob", "salary": 90000 }
]
},
{
"name": "Sales",
"employees": [
{ "name": "Charlie", "salary": 80000 }
]
}
]
}
}
// すべての従業員の給与
$..employees[*].salary
// 給与が90000以上の従業員
$..employees[?(@.salary >= 90000)]
配列データの処理
// Eコマースデータ
{
"products": [
{ "name": "Laptop", "price": 1000, "stock": 5 },
{ "name": "Mouse", "price": 20, "stock": 0 },
{ "name": "Keyboard", "price": 50, "stock": 10 }
]
}
// 在庫がある製品
$.products[?(@.stock > 0)]
// 価格範囲(20〜100)
$.products[?(@.price >= 20 && @.price <= 100)]
ユースケース
1. APIテス トとデバッグ
// GraphQLレスポンスからエラーメッセージを抽出
$.errors[*].message
// REST APIページネーションデータ
$.data.items[*]
2. データ分析
// 特定条件のデータフィルタリング
$..transactions[?(@.amount > 1000)]
// 統計データの収集
$..metrics[*].value
3. 設定ファイルの解析
// 特定の環境設定を抽出
$.environments[?(@.name === 'production')]
// 有効化された機能フラグ
$.features[?(@.enabled === true)].name
4. ログ分析
// エラーログのみをフィルタリング
$.logs[?(@.level === 'error')]
// 特定の時間帯のログ
$.logs[?(@.timestamp > 1234567890)]
比較演算子
JSONPathフィルタで使用可能な演算子:
===- 等しい!==- 等しくない<- より小さい<=- 以下>- より大きい>=- 以上&&- AND||- OR
使用のヒント
1. 段階的なテスト
複雑なパスは段階的に分けてテスト:
// ステップ1: $.store
// ステップ2: $.store.book
// ステップ3: $.store.book[*]
// ステップ4: $.store.book[*].title
2. 再帰的検索の活用
構造が不明な場合は .. を使用:
// すべてのpriceフィールドを検索
$..price
3. フィルタの組み合わせ
複数の条件を組み合わせる:
$..book[?(@.price < 10 && @.category === 'fiction')]
注意事項
- JSONPath式は大文字と小文字を区別します
- フィルタ式内では
@を使用して現在のオブジェクトを参照します - 配列スライスはPythonと同様に動作します(開始を含み、終了を含まない)
- 実装によって構文が若干異なる場合があります
関連ツール
- JSON Formatter - JSONフォーマット
- API Tester - APIテスト
- Regex Tester - 正規表現テスト
追加リソース
- JSONPath公式ドキュメント
- JSONPath Plus - 使用中のライブラリ