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ツール はリアルタイムクエリとハイライト位置特定を提供し、JMESPathJSONフォーマッター で完全なJSONデータ処理ワークフローを構築できます。

#JSONPath#数据查询#嵌套#过滤#提取