# JSONPath

> Proxyman에서 JSONPath로 JSON 요청 및 응답 본문을 쿼리하는 방법을 알아봅니다. 문법, 필터 연산자, 바로 복사해 쓸 수 있는 경로 예시를 함께 살펴봅니다.

## 1. 무엇인가요? {#1-whats-it}

JSONPath는 JSON 데이터를 빠르게 필터링하는 쿼리 언어입니다. Proxyman에서는 JSON 탭, Treeview 탭, [사용자 지정 컬럼](https://proxyman.com/docs/ko/basic-features/custom-header-column)에서 JSONPath를 사용할 수 있습니다.

![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}

| 연산자                    | 설명                                                                 |
| ------------------------- | -------------------------------------------------------------------- |
| `$`                       | 쿼리를 시작하는 루트 요소입니다. 모든 경로 표현식은 이 요소에서 시작합니다. |
| `@`                       | 필터 조건식이 처리하고 있는 현재 노드입니다.                         |
| `*`                       | 와일드카드입니다. 이름이나 숫자가 필요한 곳이면 어디에서든 사용할 수 있습니다. |
| `..`                      | 깊은 탐색(deep scan)입니다. 이름이 필요한 곳이면 어디에서든 사용할 수 있습니다. |
| `.<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]                             | 세 번째 책                                                           |
| $..book\[-2]                            | 뒤에서 두 번째 책                                                    |
| $..book\[0,1]                           | 처음 두 권의 책                                                      |
| $..book\[:2]                            | 인덱스 0(포함)부터 인덱스 2(제외)까지의 모든 책                      |
| $..book\[1:2]                           | 인덱스 1(포함)부터 인덱스 2(제외)까지의 모든 책                      |
| $..book\[-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)
