본문으로 건너뛰기
AZ Tools

JSONPath 테스터

JSON 문서에 대해 JSONPath 쿼리($.store.book[*].author, $..price) 실행, 일치 값 확인.

예시:

일치 (3 건)

[
  "Evelyn Waugh",
  "Herman Melville",
  "Nigel Rees"
]

루트 $, 자식 .key, 재귀 탐색 ..key, 인덱스 [n]과 [-1], 와일드카드 [*], 대괄호 표기 ['key']를 지원합니다. 필터와 슬라이스는 지원하지 않으니 jq를 쓰세요.

사용법

  1. 상단 박스에 JSON 붙여넣기(기본 샘플로 시작 가능).
  2. JSONPath 식 작성 — 모르면 예시 칩 클릭.
  3. 일치 값 확인 또는 JSON 배열로 복사.

자세한 설명

펼치기

JSON 문서와 JSONPath 식을 붙여 넣으면 문서에 대해 경로를 평가해 일치하는 값 전부를 JSON 배열로 보여 줍니다. 흔히 쓰는 부분집합을 지원합니다. 루트 $, 점 탐색 .key, 색인 [n](양수와 음수), 와일드카드 [*], 재귀 하강 .., 대괄호 따옴표 키 ['key']입니다. jq, Bruno, 포스트맨, k6, 클라우드워치 질의에 붙여 넣기 전에 JSONPath가 맞는지 확인할 때 씁니다.

이 부분집합은 의도된 것이고 어디서 끊기는지 알아 둘 값어치가 있습니다. $.items[?(@.price > 10)] 같은 필터 식, [1:3] 같은 배열 구간, [0,2] 같은 합집합은 구현되어 있지 않으며, 조용히 빈 결과를 내는 대신 지원하지 않는 대괄호 식이라고 알려 줍니다. 점 탐색은 식별자 모양의 이름만 받으므로, 공백이나 하이픈이 든 키는 대괄호 따옴표 형태로 써야 합니다.

더 큰 문제는 JSONPath가 2024년 RFC 9535로 표준화되기 전까지 스무 해 동안 블로그 글이었다는 점이고, 그 사이에 자란 구현들은 서로 일치하지 않습니다. 결과가 돌아오는 순서, 재귀 하강이 노드를 자식보다 먼저 방문하는지 나중에 방문하는지, 속성이 없을 때 필터가 어떻게 동작하는지, 결과가 평평한 목록인지 노드 참조의 집합인지가 모두 라이브러리마다 다릅니다. 여기서 한 가지로 동작하는 경로가 붙여 넣을 도구에서는 다르게 동작할 수 있는데, 결과의 모양을 먼저 확인하는 우회가 값어치를 하는 이유가 바로 이것입니다.

아무것도 못 찾은 것과 null을 찾은 것은 출력에서 달라 보이고 뜻도 다릅니다. 빈 배열은 경로가 아무 노드도 고르지 못했다는 뜻이고, [null]은 노드 하나를 골랐는데 그 값이 마침 null이라는 뜻입니다. 어떤 필드가 없음을 단언하려고 경로를 쓸 때 앞의 것을 뒤의 것으로 읽는 혼동이 흔합니다.

모든 평가는 붙여 넣은 문서에 대해 페이지 안에서 이루어집니다. 아무 데도 전송하지 않는데, 문서가 운영 환경의 API 응답일 때 중요한 부분입니다.

자주 묻는 질문

JSONPath 방언?

Goessner / RFC 9535 문법의 실용적 부분집합 — 루트 $·자식 .key·재귀 ..·인덱스 [n]·와일드카드 *·따옴표 키 ['x']. 필터식([?(@.price < 10)])·슬라이스([0:2])·유니온([0,2])·스크립트식 미지원. 그건 jq 사용.

경로가 아무것도 반환 안 하는 이유?

흔한 원인: 키명 오타(JSONPath은 대소문자 구분)·일부 항목에 필드 없음(재귀 ..은 오류 없이 건너뜀)·입력이 유효 JSON 아님. 더 단순한 경로 먼저 시도해 데이터 확인.

$..price가 모든 깊이의 price 찾나요?

예 — ..는 재귀 하강, price는 price 키 있는 노드로 필터링. 값을 반환하고 포함 객체는 반환 안 함. 컨테이너 얻으려면 $..* 사용 후 직접 필터링.

대용량 API 응답에 실행 가능?

로컬에서 예 — 파싱·순회는 수 MB 문서까지 빠름. 실제 API는 보통 커맨드라인 jq 또는 Bruno/Postman 내장 JSONPath 사용; 이 테스터는 커밋 전 식 자체 반복용.

관련 도구