본문으로 건너뛰기

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[*].title
All book titles
Books < $10
$.store.book[?(@.price < 10)]
Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]
Books with ISBN
All Prices
$.store..price
All 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과 유사하게 동작합니다 (시작 포함, 끝 미포함)
  • 일부 구현체마다 문법이 약간 다를 수 있습니다

관련 도구

추가 리소스