# JSONPath

> Proxyman で JSONPath を使い、JSON のリクエスト/レスポンス本文をクエリします。構文、フィルタ演算子、そのままコピーして使えるパスの例を解説します。

## 1. 概要 {#1-whats-it}

JSONPath は、JSON データをすばやく絞り込むためのクエリ言語です。Proxyman では、JSON タブ、Treeview タブ、[カスタムカラム](https://proxyman.com/docs/ja/basic-features/custom-header-column)で使用できます。

![JSON Path 式でレスポンス本文を絞り込んでいる Proxyman の JSON タブ](https://proxyman.com/docs/assets/Screenshot%202026-08-25%20at%2014.04.30.jpg)

## 2. 使い方 {#2-how-to-use}

1. Request または Response パネルで **+** ボタンをクリックします
2. **JSON** を選択して JSON タブを追加します
3. JSON 本文の上にフィルタバーが表示されます
4. **JSON Path** または **jq** のフィルタモードを選択します

## 3. 構文 {#3-syntax}

| 演算子 | 説明 |
| --- | --- |
| `$` | クエリの起点となるルート要素です。すべてのパス式はここから始まります。 |
| `@` | フィルタの述語で処理中の現在のノードです。 |
| `*` | ワイルドカードです。名前または数値が必要な箇所であればどこでも使用できます。 |
| `..` | 深い階層まで走査します。名前が必要な箇所であればどこでも使用できます。 |
| `.<name>` | ドット記法による子要素 |
| `['<name>' (, '<name>')]` | ブラケット記法による子要素（複数指定可） |
| `[<number> (, <number>)]` | 配列のインデックス（複数指定可） |
| `[start:end]` | 配列のスライス演算子 |
| `[?(<expression>)]` | フィルタ式。式は真偽値に評価される必要があります。 |

### フィルタ演算子 {#filter-operators}

フィルタは、配列を絞り込むために使う論理式です。典型的なフィルタは `[?(@.age > 18)]` のような形式で、`@` は処理中の現在の要素を表します。

| 演算子 | 説明 |
| --- | --- |
| == | 左辺が右辺と等しい（1 と '1' は等しくないので注意してください） |
| != | 左辺が右辺と等しくない |
| < | 左辺が右辺より小さい |
| <= | 左辺が右辺以下である |
| > | 左辺が右辺より大きい |
| >= | 左辺が右辺以上である |
| =\~ | 左辺が正規表現に一致する \[?(@.name =\~ /foo.\*?/i)] |
| in | 左辺が右辺に存在する \[?(@.size in \['S', 'M'])] |
| nin | 左辺が右辺に存在しない |
| subsetof | 左辺が右辺の部分集合である \[?(@.sizes subsetof \['S', 'M', 'L'])] |
| anyof | 左辺と右辺に共通する要素がある \[?(@.sizes anyof \['M', 'L'])] |
| noneof | 左辺と右辺に共通する要素がない \[?(@.sizes noneof \['M', 'L'])] |
| size | 左辺（配列または文字列）のサイズが右辺と一致する |
| empty | 左辺（配列または文字列）が空である |

### パスの例 {#path-examples}

次の JSON データを例に説明します。

```javascript
{
    "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
        }
    },
    "expensive": 10
}
```

| JsonPath | 結果 |
| --- | --- |
| $.store.book\[\*].author | すべての書籍の著者 |
| $..author | すべての著者 |
| $.store.\* | 書籍と自転車のすべての要素 |
| $.store..price | すべての商品の価格 |
| $..book\[2] | 3 番目の書籍 |
| $..book\[-2] | 後ろから 2 番目の書籍 |
| $..book\[0,1] | 最初の 2 冊の書籍 |
| $..book\[:2] | インデックス 0（含む）から 2（含まない）までのすべての書籍 |
| $..book\[1:2] | インデックス 1（含む）から 2（含まない）までのすべての書籍 |
| $..book\[-2:] | 最後の 2 冊の書籍 |
| $..book\[2:] | インデックス 2（含む）から末尾までのすべての書籍 |
| $..book\[?(@.isbn)] | ISBN 番号を持つすべての書籍 |
| $.store.book\[?(@.price < 10)] | 価格が 10 未満のすべての書籍 |
| $..book\[?(@.price <= $\['expensive'])] | 「expensive」ではないすべての書籍 |
| $..book\[?(@.author =\~ /.\*REES/i)] | 正規表現に一致するすべての書籍（大文字と小文字を区別しない） |
| $..\* | すべての要素を取得 |
| $..book.length() | 書籍の数 |

## 参考資料 {#reference}

* [GitHub 上の Jayway JsonPath](https://github.com/json-path/JsonPath)
