JSONPathクエリガイド:JSONからネストされたデータを正確に抽出
JSON(更新: 2026年6月18日)
JSONPathとは
JSONPathはJSONデータのクエリ言語で、XPathがXMLに対するものと同様に、複雑にネストされたJSONから正確にデータを抽出できます:
{
"store": {
"books": [
{"title": "三体", "price": 68},
{"title": "活きる", "price": 45},
{"title": "百年の孤独", "price": 55}
]
}
}
$.store.books[*].title で全書名を抽出:["三体", "活きる", "百年の孤独"]
基本構文リファレンス
| 構文 | 意味 | 例 |
|---|---|---|
$ |
ルートノード | $ |
. |
子ノード | $.store |
[] |
配列インデックスまたは子ノード | $[0]、$['key'] |
* |
ワイルドカード、全要素 | $.store.* |
.. |
再帰下降、全レベル | $..title |
[start:end] |
配列スライス | $[0:2] |
[?(expr)] |
フィルター式 | $[?(@.price > 50)] |
構文の詳細解説
ルートノード $
$ はJSONのルートを表します。すべてのパスは $ から始まります:
$ → JSON全体
$.store → storeオブジェクト
子ノードアクセス .
. または [] で子ノードにアクセス:
$.store.books → books配列
$.store['books'] → 等価な書き方、キー名に特殊文字が含まれる場合は必須
配列インデックス []
$.store.books[0] → 最初の本
$.store.books[-1] → 最後の本
$.store.books[0:2] → 最初の2冊(スライス)
ワイルドカード *
$.store.books[*] → すべての本
$.store.books[*].title → すべての書名
再帰下降 ..
.. は全レベルを検索し、完全なパスを知る必要がありません:
$..title → 全レベルのtitleフィールド
$..price → 全レベルのpriceフィールド
深くネストされたAPIレスポンスでは
..が特に便利です。
フィルター式 ?()
フィルタリングはJSONPathの最も強力な機能です:
比較演算子
| 演算子 | 意味 | 例 |
|---|---|---|
== |
等しい | $[?(@.price == 45)] |
!= |
等しくない | $[?(@.price != 45)] |
> |
より大きい | $[?(@.price > 50)] |
< |
より小さい | $[?(@.price < 50)] |
>= |
以上 | $[?(@.price >= 55)] |
論理演算子
$[?(@.price > 50 && @.price < 70)] → 価格が50〜70の間
$[?(@.category == 'fiction' || @.price < 40)] → フィクションまたは価格40未満
文字列マッチング
$[?(@.title =~ /三.*/)] → タイトルが「三」で始まる
JSONPathツールの使い方
ステップ1:ツールを開く
JSONPathツール にアクセスし、クエリ画面に入ります。
ステップ2:JSONデータを入力
APIレスポンスまたはJSONデータを入力欄に貼り付け。JSONフォーマッター で事前に整形できます。
ステップ3:JSONPath式を記述
クエリボックスに式を入力(例:$.data.users[*].name)。
ステップ4:抽出結果を確認
ツールがリアルタイムでマッチ結果を表示し、ソース内のマッチノードをハイライトします。
実践:APIレスポンスからデータを抽出
GitHub APIの例
{
"items": [
{"full_name": "vuejs/vue", "stargazers_count": 45000, "language": "TypeScript"},
{"full_name": "facebook/react", "stargazers_count": 42000, "language": "JavaScript"}
]
}
$.items[*].full_name → 全リポジトリ名
$.items[?(@.stargazers_count > 43000)].full_name → Star > 43000のリポジトリ名
ページネーションデータの抽出
$.data.list[*].id → 現在のページの全ID
$.pagination.next_cursor → 次ページのカーソル
JSONPath vs JMESPath
| 比較項目 | JSONPath | JMESPath |
|---|---|---|
| 構文スタイル | XPath風 | SQL/パイプ風 |
| 再帰検索 | .. をネイティブサポート |
明示的な走査が必要 |
| フィルター構文 | [?(@.x > 1)] |
[?x > 1] |
| 射影/変換 | 非対応 | [*].{n: name} に対応 |
| 複数結果のソート | 保証なし | ソート可能 |
| ツール | JSONPath | JMESPath |
単純な抽出にはJSONPath、変換/射影が必要な場合はJMESPath。
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| クエリ結果が空 | パスの入力ミス | キー名の大文字小文字を確認 |
| フィルターが効かない | 構文バージョンの差異 | ツールが対応する構文バージョンを確認 |
| 配列のインデックス超過 | インデックスが範囲外 | [*] を使用するか配列長を確認 |
| 再帰結果が多すぎる | .. が全レベルにマッチ |
範囲を絞るかフィルター条件を追加 |
| 特殊文字キーでエラー | キーに . や - が含まれる |
ブラケット構文 ['key.name'] を使用 |
まとめ
JSONPathはJSONデータ処理の強力なツールです。$、.、[]、*、..、?() の6つのコア構文をマスターすれば、任意のネストされたJSONから正確にデータを抽出できます。JSONPathツール はリアルタイムクエリとハイライト位置特定を提供し、JMESPath と JSONフォーマッター で完全なJSONデータ処理ワークフローを構築できます。
#JSONPath#数据查询#嵌套#过滤#提取