JSONPath 쿼리
최종 업데이트: 2026년 10월 2일
JSON 문서에 JSONPath 식을 실행해 일치한 값과 그 경로를 확인합니다. 쿼리는 브라우저에서 실행되며 문서는 어디에도 전송되지 않습니다.
쿼리 언어가 하는 일
JSONPath는 JSON에게 폴더 경로가 파일 시스템에게 그러한 것과 같습니다. 어떤 값을 원하는지 간결하게 말하는 수단입니다. $는 문서 루트이고, .name은 속성으로 들어가며, […]는 배열 안에서 선택합니다.
- 자식:
$.store.bicycle.color, 이름을 인용해야 할 때는$['store']['bicycle']['color']. - 와일드카드:
$.store.book[*].title은 각 책의 제목,$.store.*는 store 객체의 모든 값. - 재귀 하강:
$..price는 어느 깊이에서든price를 찾습니다. 강력하지만 너무 많이 일치하기 쉽습니다——아래 참고. - 인덱스와 슬라이스:
[0], 마지막 항목은[-1], 앞의 두 개는[0:2],[0:5:2]로 간격. - 합집합:
[0,2]와['book','bicycle']은 여러 개를 한 번에 선택합니다. - 필터:
[?(@.price < 10)]은 가격이 10 미만인 항목을 남깁니다. 연산자는== != < <= > >=,&&와||로 조합합니다.
필터는 참·거짓이 아니라 존재를 판단합니다
필터 안의 단독 경로는 그 속성이 있는지를 묻습니다. 그래서 [?(@.inStock)]은 inStock이 false인 항목에도 일치합니다——속성은 존재하기 때문입니다. 이것이 RFC 9535의 해석입니다. 값으로 판단하려면 명시하세요: [?(@.inStock == true)]. JSONPath에서 가장 흔한 놀라움이며, 이 도구가 아니라 언어의 성질입니다.
의도적으로 하지 않는 것
length(), match(), search() 같은 필터 함수는 구현하지 않았고, 정규식, 괄호 안의 스크립트 식, 일부 라이브러리가 추가하는 부모·형제 확장도 지원하지 않습니다. 이를 사용한 쿼리는 조용히 잘못된 결과를 반환하는 대신 메시지와 함께 거부됩니다——이 페이지는 지원 범위를 밝히므로 여기의 ‘일치’는 그대로의 의미입니다.
자주 묻는 질문
어떤 JSONPath 문법을 지원하나요?
루트 $, .name 또는 ['name']으로 자식 접근, 와일드카드 .* 와 [*], 재귀 하강 ..name 과 ..*, 음수도 포함한 배열 인덱스, 슬라이스 [start:end:step], [0,1] 과 ['a','b'] 같은 합집합, 그리고 [?(@.price < 10)] 형식의 필터(연산자는 == != < <= > >=, && 와 || 로 조합 가능)입니다.
지원하지 않는 것은 무엇인가요?
length(), match(), search() 같은 필터 함수, 정규식, 괄호 안의 스크립트 식, 그리고 일부 라이브러리가 추가하는 JSONPath 확장(부모·형제 참조 등)은 지원하지 않습니다. 이를 사용한 쿼리는 조용히 잘못된 결과를 반환하는 대신 거부됩니다.
?(@.inStock)이 inStock이 false인 항목에도 일치하는 이유는 무엇인가요?
필터 안의 단독 경로는 참·거짓이 아니라 존재를 판단하기 때문입니다. 속성이 있는지를 묻는 것이고, false로 설정된 속성도 존재합니다. 값으로 판단하려면 ?(@.inStock == true)라고 명시하세요. 이것이 RFC 9535의 필터 해석입니다.
일치한 값이 어디에서 왔는지 알 수 있나요?
네. 각 결과는 발견된 경로와 함께 나열되며, 쿼리를 쓸 때와 같은 점과 대괄호 표기이므로 그 경로를 그대로 쿼리나 다른 JSON 도구에 붙여 넣을 수 있습니다.
제 문서가 업로드되나요?
아니요. 문서는 브라우저에서 JSON.parse로 분석되고 쿼리는 메모리에서 실행됩니다. 아무것도 업로드되지 않으며, 네트워크를 끊어도 동작합니다.
$..price가 예상보다 많이 반환되는 이유는 무엇인가요?
재귀 하강은 문서의 모든 계층을 방문하므로 ..price는 어디에 있는 price 속성이든 찾습니다——배열 안, 중첩 객체 안, 관련 없는 가지 안에서도 마찬가지입니다. 좁히려면 $.store.book[*].price처럼 경로로 한정하세요.
대신 스키마로 문서를 검사하시겠어요? JSON Schema를 쓰면 됩니다. 버그를 발견했나요? 문의하기.