JSON Path Tester
JSONPath 표현식을 테스트하고 JSON 데이터에서 원하는 값을 추출하는 도구입니다. API 응답 파싱과 데이터 분석에 필수적인 도구!
Result will appear here...
Common Patterns
Root
$Root object
All Books
$.store.book[*]All books in store
First Book
$.store.book[0]First book
Last Book
$.store.book[-1]Last book
Book Titles
$.store.book[*].titleAll book titles
Books < $10
$.store.book[?(@.price < 10)]Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]Books with ISBN
All Prices
$.store..priceAll prices (recursive)
Syntax Guide:
$- Root object@- Current object.or[]- Child operator..- Recursive descent*- Wildcard[start:end]- Array slice[?(<expr>)]- Filter expression
JSONPath란?
JSONPath는 JSON 데이터 구조에서 값을 쿼리하는 표현식 언어입니다. XPath가 XML에서 하는 것처럼, JSONPath는 JSON에서 특정 데이터를 추출할 수 있게 해줍니다.
주요 문법
기본 연산자
| 연산자 | 설명 | 예시 |
|---|---|---|
$ | 루트 객체 | $ |
@ | 현재 객체 (필터 내부) | @.price |
. 또는 [] | 자식 요소 | $.store.book |
.. | 재귀 탐색 | $..price |
* | 와일드카드 | $.store.* |
[n] | 배열 인덱스 | $.store.book[0] |
[start:end] | 배열 슬라이스 | $.store.book[0:2] |
[?(<expr>)] | 필터 표현식 | $..book[?(@.price < 10)] |
배열 인덱싱
// 첫 번째 요소
$.store.book[0]
// 마지막 요소
$.store.book[-1]
// 범위 (0부터 2번 인덱스 전까지)
$.store.book[0:2]
// 모든 요소
$.store.book[*]
필터 표현식
// 가격이 10 미만인 책
$.store.book[?(@.price < 10)]
// ISBN이 있는 책
$.store.book[?(@.isbn)]
// 카테고리가 fiction인 책
$.store.book[?(@.category === 'fiction')]
// 제목에 특정 단어가 포함된 책
$.store.book[?(@.title.includes('Moby'))]
실제 사용 예시
API 응답에서 데이터 추출
// API 응답
{
"users": [
{ "id": 1, "name": "John", "active": true },
{ "id": 2, "name": "Jane", "active": false },
{ "id": 3, "name": "Bob", "active": true }
]
}
// 활성 사용자만 추출
$.users[?(@.active === true)]
// 모든 사용자 이름
$.users[*].name
중첩된 데이터 탐색
// 복잡한 JSON
{
"company": {
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "Alice", "salary": 100000 },
{ "name": "Bob", "salary": 90000 }
]
},
{
"name": "Sales",
"employees": [
{ "name": "Charlie", "salary": 80000 }
]
}
]
}
}
// 모든 직원의 급여
$..employees[*].salary
// 급여가 90000 이상인 직원
$..employees[?(@.salary >= 90000)]
배열 데이터 처리
// E-commerce 데이터
{
"products": [
{ "name": "Laptop", "price": 1000, "stock": 5 },
{ "name": "Mouse", "price": 20, "stock": 0 },
{ "name": "Keyboard", "price": 50, "stock": 10 }
]
}
// 재고가 있는 제품
$.products[?(@.stock > 0)]
// 가격 범위 (20 ~ 100)
$.products[?(@.price >= 20 && @.price <= 100)]
활용 사례
1. API 테스트 및 디버깅
// GraphQL 응답에서 에러 메시지 추출
$.errors[*].message
// REST API 페이지네이션 데이터
$.data.items[*]
2. 데이터 분석
// 특정 조건의 데이터 필터링
$..transactions[?(@.amount > 1000)]
// 통계 데이터 수집
$..metrics[*].value
3. 설정 파일 파싱
// 특정 환경 설정 추출
$.environments[?(@.name === 'production')]
// 활성화된 기능 플래그
$.features[?(@.enabled === true)].name
4. 로그 분석
// 에러 로그만 필터링
$.logs[?(@.level === 'error')]
// 특정 시간대 로그
$.logs[?(@.timestamp > 1234567890)]
비교 연산자
JSONPath 필터에서 사용 가능한 연산자:
===- 같음!==- 같지 않음<- 작음<=- 작거나 같음>- 큼>=- 크거나 같음&&- AND||- OR
사용 팁
1. 단계별 테스트
복잡한 경로는 단계별로 나눠서 테스트:
// 1단계: $.store
// 2단계: $.store.book
// 3단계: $.store.book[*]
// 4단계: $.store.book[*].title
2. 재귀 탐색 활용
구조를 모를 때는 .. 사용:
// 모든 price 필드 찾기
$..price
3. 필터 조합
여러 조건을 조합:
$..book[?(@.price < 10 && @.category === 'fiction')]
주의사항
- JSONPath 표현식은 대소문자를 구분합니다
- 필터 표현식 내부에서는
@를 사용하여 현재 객체를 참조합니다 - 배열 슬라이싱 은 Python과 유사하게 동작합니다 (시작 포함, 끝 미포함)
- 일부 구현체마다 문법이 약간 다를 수 있습니다
관련 도구
- JSON Formatter - JSON 포맷팅
- API Tester - API 테스트
- Regex Tester - 정규식 테스트
추가 리소스
- JSONPath 공식 문서
- JSONPath Plus - 사용 중인 라이브러리