본문으로 건너뛰기

JSONPath

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

1. 무엇인가요?​

JSONPath는 JSON 데이터를 빠르게 필터링하는 쿼리 언어입니다. Proxyman에서는 JSON 탭, Treeview 탭, 사용자 지정 컬럼에서 JSONPath를 사용할 수 있습니다.

JSON Path 표현식으로 응답 본문을 필터링하는 Proxyman JSON 탭

2. 사용 방법​

  1. Request 또는 Response 패널에서 + 버튼을 클릭합니다
  2. JSON을 선택해 JSON 탭을 추가합니다
  3. JSON 본문 위에 필터 바가 나타납니다
  4. JSON Path 또는 jq 필터 모드를 선택합니다

3. 문법​

연산자설명
$쿼리를 시작하는 루트 요소입니다. 모든 경로 표현식은 이 요소에서 시작합니다.
@필터 조건식이 처리하고 있는 현재 노드입니다.
*와일드카드입니다. 이름이나 숫자가 필요한 곳이면 어디에서든 사용할 수 있습니다.
..깊은 탐색(deep scan)입니다. 이름이 필요한 곳이면 어디에서든 사용할 수 있습니다.
.<name>점(.) 표기법으로 지정하는 자식 노드
['<name>' (, '<name>')]대괄호 표기법으로 지정하는 자식 노드 또는 여러 자식 노드
[<number> (, <number>)]배열 인덱스 또는 여러 인덱스
[start:end]배열 슬라이스 연산자
[?(<expression>)]필터 표현식. 표현식은 불리언 값으로 평가되어야 합니다.

필터 연산자​

필터는 배열을 걸러내는 데 쓰이는 논리 표현식입니다. 일반적인 필터는 [?(@.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왼쪽 값(배열 또는 문자열)이 비어 있어야 합니다

경로 예시​

다음 JSON 데이터를 예로 들겠습니다.

{
"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()책의 개수

참고 자료​