JSONPath 테스터
그 경로가 실제로 무엇을 고르는가.
예제는 입력과 설정을 일시적으로 바꿉니다. 이전 작업을 복원할 수 있습니다.
0자
출력
위에 붙여넣거나 입력하면 여기에 결과가 표시됩니다.
파일은 내 기기 밖으로 나가지 않습니다
이 도구는 브라우저 안에서만 작동합니다. 붙여넣은 내용은 기기에서 처리되고 서버로 전송되지 않으므로 토큰, 키, 공개 전 문서도 안심하고 사용할 수 있습니다.
사용 예시
예: 날씨 예보 API 응답에서 기온과 비 올 확률만 골라내기
공공 API처럼 response.body.items.item 아래에 예보가 배열로 들어 있는 응답입니다(값은 지어낸 것). 항목마다 fcstTime(시각), category(TMP 기온, POP 강수확률), fcstValue(값)가 있고, 값은 "60"처럼 문자열입니다. 0900·1200·1800 세 시각의 TMP와 POP, 모두 6개 항목을 붙여 넣고 결과 표시를 ‘한 줄에 하나씩’으로 둡니다.
- $.response.header.resultCode → 00. 응답이 정상인지 먼저 확인합니다.
- $.response.body.items.item[?(@.category == "TMP")].fcstValue → 9, 14, 11(일치 3). 작은따옴표로 'TMP'라고 써도 됩니다.
- $.response.body.items.item[?(@.category == 'POP' && @.fcstValue >= 60)].fcstTime → 1200, 1800. 값이 문자열 "60"이어도 크기 비교는 숫자로 합니다.
- items를 빼먹은 $.response.body.item[*].category는 ‘일치하는 항목이 없습니다.’입니다. $, $.response, $.response.body 순으로 한 단계씩 늘려 보면 어디서 끊기는지 보입니다.
| 경로 | 일치 | 결과 |
|---|---|---|
| $..fcstTime | 6 | 0900, 0900, 1200, 1200, 1800, 1800 |
| $.response.body.items.item[0:2].category | 2 | TMP, POP |
| $.response.body.items.item[-1:] | 1 | 마지막 항목 전체(1800 POP 80) |
| $.response.body.items.item[?(@.category == "TMP" && @.fcstTime =~ /^1/)].fcstValue | 2 | 14, 11(12시·18시 기온) |
| $.response.body.items.item[?(@.fcstValue == 60)].fcstTime | 1 | 1200 |
| $..item[(@.length-1)] | — | 스크립트 표현식이라 실행하지 않고, 쓸 수 있는 형식 목록을 보여 줌 |
일치 개수가 함께 나오므로 기대한 수(TMP라면 3개)와 다르면 바로 알 수 있습니다. 붙여 넣은 응답은 브라우저 밖으로 나가지 않으니, 외부에 올리기 곤란한 사내 API 응답도 그대로 확인할 수 있습니다.
사용 방법
- JSON을 붙여넣습니다.
- 경로를 입력합니다. $.users[*].email, $..price, $.items[?(@.qty > 2)].name 등.
- 돌아온 내용과 그 위의 개수를 확인합니다.
- 다른 곳에 붙여넣을 목록이 필요하면 “한 줄에 하나씩”으로 바꾸세요.
자주 묻는 질문
- 어떤 방언을 따르나요?
- 모든 구현에서 공통으로 통하는 부분입니다. JSONPath는 2024년 RFC 9535가 나오기까지 명세 자체가 없었고, 그때는 이미 라이브러리마다 자기 방언을 갖고 있었습니다. 여기서는 이름·인덱스·슬라이스·와일드카드·재귀 하강·비교 필터를 지원하고, 그 범위를 넘으면 그렇다고 알려 줍니다.
- 스크립트 표현식도 실행되나요?
- 의도적으로 되지 않습니다. 일부 구현은 $.a[(@.length-1)]을 언어의 평가기에 그대로 넘깁니다. 붙여넣은 문자열에 대해 그렇게 하는 것은 변명의 여지가 없으므로, 실행하지 않고 설명을 돌려줍니다.
- 필터에서 무엇을 비교할 수 있나요?
- == != > >= < <= 와 정규식 =~ 이고, &&(그리고)와 ||(또는)로 조건을 이을 수 있습니다. @.qty > 2, @.name == "ada", @.sku =~ /^AB/, @.category == "POP" && @.fcstValue >= 60, 또는 존재만 확인하는 @.deleted 처럼 씁니다. "60"처럼 숫자가 담긴 문자열도 크기 비교에서는 숫자로 읽습니다.
- 아무것도 일치하지 않는 이유는?
- 대개 단계가 하나 많거나 적어서입니다. $, $.store, $.store.book 처럼 한 단계씩 늘려 가면서 어디서 일치가 끊기는지 보세요.
- 정규식에 [0-9] 같은 대괄호를 쓸 수 있나요?
- 쓸 수 있습니다. 정규식 안의 [ ]는 경로의 대괄호와 따로 읽습니다. @.fcstTime =~ /^1[2-8]/ 은 12시부터 18시까지의 항목을, @.fcstTime =~ /^(12|18)/ 은 12시와 18시 항목만 고릅니다.
- 결과를 엑셀이나 다른 곳에 붙여 넣으려면?
- 결과 표시를 ‘한 줄에 하나씩’으로 바꾸세요. 숫자와 문자열은 따옴표 없이 한 줄에 하나씩, 객체는 한 줄짜리 JSON으로 나옵니다. JSON으로 둘 때는 들여쓰기를 공백 2칸, 4칸, 탭 중에서 고를 수 있습니다.
- 서버로 전송되나요?
- 아니요. 브라우저 안에서만 동작하므로 입력한 내용은 컴퓨터를 벗어나지 않습니다.