JSONPath 테스터
JSON 데이터에 JSONPath 표현식을 실시간으로 테스트. 구문 강조로 매칭 결과 확인. 필터, 와일드카드, 재귀 하강 지원. 무료, 브라우저 기반.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
JSONPath 구문 참조 (RFC 9535)
$— 문서 루트.key,['key'],["key"]— 객체 멤버[n],[-1]— 배열 요소. 음수 인덱스는 끝에서부터 셈[start:end:step]— 슬라이스. 예:[0:2],[1:],[::-1][0,2],['title','price']— 대괄호 하나에 여러 선택자. 결과는 선택자 순서[*],.*— 배열의 모든 요소 또는 객체의 모든 멤버 값..key,..[0],..*— 깊이에 관계없는 자손[?@.price < 10]— 필터.[?(@.price < 10)]으로도 씀[?@.isbn],[?!@.isbn]— 멤버가 있음 / 없음[?@.a.b == 'x' && @.c > $.min]— 필터 안의 중첩 경로,&&||!, $로 시작하는 절대 경로length(),count(),match(),search(),value()— RFC 9535가 정의한 5개 함수
제한 사항
- RFC 9535에 없는 구문은 “지원하지 않는 구문”과 문자 위치를 표시합니다: 스크립트 표현식
[(...)],=~,in/nin, 다른 라이브러리의~(멤버 이름 가져오기) 같은 확장. $.store.book.length는length라는 이름의 멤버를 선택합니다. 배열에는 그런 멤버가 없으므로 결과가 비어 있습니다. 길이로 거르려면 필터 안에서length()를 쓰세요(예:$[?length(@.book) > 3]).- 결과에는 매칭된 값만 나오고 정규화 경로(
$['store']['book'][0]등)는 표시하지 않습니다. - 객체 멤버는 JSON 텍스트에 적힌 순서대로 반환합니다. RFC 9535는 이 순서를 정하지 않으므로 다른 구현에서는 순서가 다를 수 있습니다.
match()와search()는.을[^\n\r]로 바꾼 뒤u플래그가 붙은 JavaScript 정규식으로 실행합니다(RFC 9485 §5.3). JavaScript가 거부하는 패턴은 false가 되고,\d나 전방 탐색처럼 JavaScript에만 있는 구문도 받아들입니다.- 숫자는
JSON.parse로 JavaScript 숫자가 되므로 253보다 큰 정수는 비교 전에 정밀도를 잃습니다.
주요 활용 사례
JSONPath는 API 응답에서 데이터 추출, kubectl의 -o jsonpath 출력 템플릿,
AWS Step Functions의 InputPath 같은 필드에서 쓰입니다.
다만 각자 방언이 있어 kubectl은 식을 중괄호로 감싸고, Step Functions의 ResultPath에서는 필터를 쓸 수 없습니다. 이 도구는 RFC 9535에 따라 해석합니다.
JSONPath 쿼리를 익히면 중첩된 JSON 구조를 다룰 때 시간을 크게 절약할 수 있습니다.
FAQ
JSONPath란 무엇인가요?
JSONPath는 JSON을 위한 쿼리 언어로, XML의 XPath에 해당합니다. 경로 표현식을 사용하여 JSON 문서에서 노드를 선택합니다. RFC 9535(2024)로 표준화되었습니다. kubectl 출력 템플릿, AWS Step Functions, 여러 API 테스트 도구가 그 변형을 사용합니다.
JSONPath 표현식에서 $는 무엇을 의미하나요?
$ 는 JSON 문서의 루트 요소를 가리킵니다. 유효한 JSONPath 표현식은 모두 $로 시작해야 합니다. 단독으로 사용하면 전체 문서를 선택하고, 이후에 선택자를 연결합니다(예: $.store.book[0].title).
배열의 모든 요소를 선택하려면 어떻게 하나요?
배열 키 뒤에 와일드카드 선택자 [*]를 사용합니다. 예를 들어 $.store.book[*]은 배열의 모든 book 객체를 반환합니다. 각 요소를 더 깊이 접근할 수도 있습니다: $.store.book[*].author는 모든 author 값을 반환합니다.
필터 표현식은 어떻게 사용하나요?
필터는 [?표현식]으로 쓰고, @는 검사 중인 요소를 가리킵니다. RFC 9535에서는 괄호를 생략할 수 있어 $.store.book[?@.price < 10]과 $.store.book[?(@.price < 10)]은 같습니다. ==, !=, <, <=, >, >=로 비교하고, &&, ||, !로 조건을 조합하며, @.author.name 같은 중첩 경로, $로 시작하는 문서의 다른 값과의 비교, length(), count(), match(), search(), value() 함수를 쓸 수 있습니다.
재귀 하강(..)이란 무엇인가요?
.. 연산자는 현재 노드의 모든 자손을 재귀적으로 검색합니다. 예를 들어 $..author는 중첩 깊이에 관계없이 JSON 트리 어디서든 모든 author 필드를 찾습니다.
"지원하지 않는 구문"이 표시되는 이유는 무엇인가요?
RFC 9535에 정의되지 않은 구문이 들어 있어서, 빈 결과를 돌려주지 않고 문자 위치를 표시하며 멈춘 것입니다. 흔한 예는 스크립트 표현식 [(@.length-1)]([-1] 사용), =~ 연산자(match()나 search() 사용), in / nin입니다. "매칭 없음"이 표시되면 표현식은 올바르고 JSON에 해당하는 값이 없다는 뜻입니다.