JSON 경로 표현식 이해 - JSONPath 문법부터 필터 검색까지 실전 활용 가이드
중첩된 JSON에서 원하는 값을 한 줄로 꺼내는 방법. 루트 기호부터 와일드카드, 필터 표현식까지 예제로 정리했습니다.
![]()
API 응답을 받아보면 중괄호와 대괄호가 겹겹이 쌓인 JSON 데이터가 눈앞에 펼쳐집니다. 그 안에서 값 하나를 꺼내려고 반복문을 몇 겹씩 중첩해 본 경험, 개발자라면 누구나 있습니다. JSON 경로 표현식을 제대로 이해하면 이 복잡한 구조를 문자열 한 줄로 탐색할 수 있습니다. 오늘은 그 문법과 실전 활용법을 예제로 정리합니다.
JSON 경로 표현식이란 무엇인가
JSON 경로 표현식(JSONPath)은 JSON 문서 안의 특정 데이터를 가리키는 문자열 표기법입니다. XML을 다루는 XPath에서 아이디어를 가져와 2007년 스테판 괴스너(Stefan Goessner)가 처음 제안했습니다. 이후 자바스크립트, 파이썬, 자바 등 대부분의 언어와 데이터 도구가 이 표기법을 지원하게 되었습니다.
핵심은 경로 하나로 원하는 노드를 지목한다는 점입니다. 중첩된 객체를 일일이 파고들 필요 없이, 마치 파일 시스템 경로처럼 데이터의 위치를 표현합니다. 예를 들어 $.store.book[0].title은 store 객체 안 book 배열의 첫 번째 요소가 가진 title 값을 정확히 가리킵니다.
JSON 경로 표현식의 진짜 가치는 코드가 아니라 데이터 구조 자체를 언어로 다룬다는 데 있습니다. 반복문 없이도 데이터의 정확한 위치를 명확하게 지정할 수 있습니다.
기본 문법 - 루트부터 점 표기법까지
모든 경로는 루트 기호에서 시작합니다. 아래는 실무에서 가장 자주 쓰이는 연산자를 정리한 표입니다.
| 기호 | 의미 | 예시 |
|---|---|---|
| $ | 루트 객체(최상위) | $ |
| .키 | 자식 요소 접근 | $.user.name |
| ['키'] | 대괄호 방식 접근 | $['user']['name'] |
| .. | 재귀 하위 탐색 | $..price |
| * | 와일드카드(모든 요소) | $.book[*] |
| [n] | 배열 인덱스 | $.items[2] |
| [?()] | 필터 표현식 | $.book[?(@.price<10)] |
사용자 객체에서 이름을 꺼낸다면 $.user.name처럼 점 표기법을 씁니다. 점 대신 대괄호를 써서 $['user']['name']로 표현할 수도 있습니다. 두 방식은 결과가 같지만, 키에 공백이나 하이픈, 한글 같은 특수문자가 들어갈 때는 대괄호 방식이 안전합니다.
배열과 와일드카드 다루기
JSON 데이터는 대부분 배열을 포함합니다. 목록에서 원하는 요소를 골라내는 방법을 알아두면 활용 폭이 크게 넓어집니다.
- 단일 인덱스: $.items[0]은 첫 번째, $.items[-1]은 마지막 요소를 가리킵니다.
- 슬라이스: $.items[0:3]은 0번부터 2번까지 세 개를 잘라냅니다. 끝 번호는 포함되지 않습니다.
- 와일드카드: $.items[*].name은 배열 안 모든 객체의 name 값을 한 번에 모읍니다.
인덱스와 슬라이스 조합
슬라이스는 파이썬 문법과 거의 같습니다. $.items[1:5:2]처럼 세 번째 값에 간격을 넣으면 1번부터 2칸씩 건너뛰며 선택합니다. 대량의 배열에서 일부만 샘플링할 때 유용합니다.
필터 표현식으로 조건 검색하기
JSONPath에서 가장 강력한 기능이 필터입니다. [?(조건)] 안에 조건을 넣으면 배열에서 원하는 요소만 골라냅니다. 이때 @ 기호는 현재 검사 중인 요소를 뜻합니다.
- $.book[?(@.price < 10)] - 가격이 10 미만인 책만 선택
- $.book[?(@.author == '김작가')] - 저자가 일치하는 책만 선택
- $.book[?(@.stock > 0 && @.price <= 20)] - 재고가 있고 가격이 20 이하인 책
비교 연산자(<, >, ==, !=)와 논리 연산자(&&, ||)를 조합하면 SQL의 WHERE 절과 비슷한 검색을 표현할 수 있습니다. 다만 구현체마다 필터 문법에 미묘한 차이가 있으니, 실제 사용하는 라이브러리의 문서를 확인하는 습관이 필요합니다.
실전 활용과 검증 도구
JSON 경로 표현식은 여러 곳에서 쓰입니다. 자바스크립트에서는 jsonpath-plus 같은 라이브러리로, 파이썬에서는 jsonpath-ng로 사용합니다. 명령줄에서는 jq가 비슷한 역할을 하며, Postman이나 각종 API 테스트 도구도 응답 검증에 이 표기법을 활용합니다.
경로를 작성했다면 실제 데이터에 적용해 결과를 확인하는 과정이 중요합니다. 온라인 JSONPath 평가기에 JSON과 경로를 붙여넣고 결과가 예상과 맞는지 검증한 뒤 코드에 옮기는 순서를 권합니다.
한 가지 주의할 점은 URL 전달입니다. JSONPath를 쿼리 파라미터로 API에 넘길 때 $, [, ] 같은 특수문자가 포함되면 URL이 깨지거나 서버가 잘못 해석할 수 있습니다. 이럴 때는 URL 인코더로 경로를 안전하게 변환한 뒤 전송하면 문제를 예방할 수 있습니다. 또한 필터로 걸러낸 결과가 전체 데이터에서 몇 퍼센트를 차지하는지 확인하고 싶을 때는 퍼센트 계산기로 빠르게 비율을 뽑아볼 수 있습니다.
지금 다루는 JSON이 있다면, 먼저 $.. 재귀 탐색으로 전체 구조를 훑어 어떤 키가 어디에 있는지 파악하세요. 그다음 필터 표현식으로 조건을 좁혀가며 원하는 데이터만 정확히 뽑아내는 연습을 반복하면, 복잡한 응답 데이터도 두려울 게 없습니다.