기능
JSONPath는 JSON용 쿼리 언어로, XML의 XPath와 비슷한 역할을 합니다. $.store.book[*].title 같은 표현식은 문서 안으로 들어가 원하는 값을 골라냅니다. 이 도구는 붙여 넣은 JSON에 JSONPath 표현식을 실행하고 일치하는 항목을 모두 JSON 배열로 보여 줍니다. 일치한 값, 정규화된 경로(예: $['store']['book'][0]['title']), 또는 둘 다를 볼 수 있습니다.
2024년에 발표된 IETF 표준 RFC 9535를 따르므로 JavaScript, Java, Python, Go 등의 최신 라이브러리와 같은 결과를 얻습니다. 코드에 넣기 전에 쿼리를 시험해 보거나, 필터가 아무것도 반환하지 않는 이유를 찾거나, 큰 API 응답에서 몇 개 필드만 뽑아낼 때 유용합니다.
사용 방법
- JSON 칸에 JSON을 붙여 넣거나
.json파일을 업로드하거나, 예제를 눌러 대표적인 서점 문서를 불러옵니다. - JSONPath 표현식에 쿼리를 입력합니다. 입력하는 대로 결과가 갱신됩니다.
- 표시에서 값, 경로, 경로와 값 중 하나를 고릅니다.
- 결과를 복사하거나 다운로드합니다. 표현식에 문법 오류가 있으면 해석에 실패한 문자 위치를 알려 줍니다.
문법 요약
| 표현식 | 의미 |
|---|---|
$ | 문서의 루트 |
.name 또는 ['name'] | 객체의 멤버 |
[0], [-1] | 배열 요소(음수는 끝에서부터) |
[1:3], [::2] | 슬라이스: 시작, 끝(미포함), 간격 |
* | 모든 멤버 또는 요소 |
..name | 모든 깊이의 name |
[?@.price < 10] | 필터가 참인 자식, @는 현재 항목 |
필터에서는 &&, ||, !로 조건을 조합하고, $로 문서의 다른 부분과 비교하며, 함수를 호출할 수 있습니다: length(@.tags) > 2, count(@.items[*]) == 0, 문자열 전체가 정규식과 일치해야 하는 match(@.code, '[A-Z]{3}'), 문자열 어디에서든 일치하면 되는 search(@.title, 'Ring').
예시
예제 서점 데이터에서 다음 쿼리는 가격이 10 미만인 책의 제목을 고릅니다:
$.store.book[?@.price < 10].title
결과:
["Sayings of the Century", "Moby Dick"]
$..book[?@.isbn].author로 바꾸면 ISBN이 있는 책의 저자를, $..price로 바꾸면 자전거를 포함한 매장의 모든 가격을 얻습니다.
자주 묻는 질문
› 어떤 JSONPath 문법을 지원하나요?
RFC 9535 표준 문법을 지원합니다. 점 표기법과 대괄호 표기법의 멤버 이름, 와일드카드, 배열 인덱스(음수 포함), 슬라이스, ..를 이용한 하위 검색, 비교 연산과 && || !를 쓰는 필터, 그리고 length(), count(), match(), search(), value() 함수입니다. 괄호는 단순한 묶음이므로 예전 방식인 ?(@.price < 10)도 동작합니다.
› 쿼리 결과가 빈 배열인 이유는 무엇인가요?
빈 배열은 표현식은 올바르지만 일치하는 노드가 없다는 뜻입니다. 멤버 이름(대소문자 구분)과 값이 배열인지 객체인지 확인하세요. $..* 같은 넓은 쿼리에서 '표시'를 '경로'로 바꾸면 문서에 무엇이 있는지 볼 수 있습니다.
› [(@.length-1)] 같은 스크립트 표현식을 쓸 수 있나요?
아니요. 스크립트 표현식은 임의의 코드를 실행하며 표준에도 포함되지 않습니다. 대신 음수 인덱스를 사용하세요. [-1]은 마지막 요소, [-2:]는 마지막 두 요소입니다.
› JSON이 서버로 전송되나요?
아니요. 표현식 해석과 평가는 페이지 자체 코드가 브라우저에서 처리하며 아무것도 업로드되지 않습니다.