Nouplo

JSONPath 테스터

그 경로가 실제로 무엇을 고르는가.

예제는 입력과 설정을 일시적으로 바꿉니다. 이전 작업을 복원할 수 있습니다.

0자
출력
위에 붙여넣거나 입력하면 여기에 결과가 표시됩니다.

파일은 내 기기 밖으로 나가지 않습니다

이 도구는 브라우저 안에서만 작동합니다. 붙여넣은 내용은 기기에서 처리되고 서버로 전송되지 않으므로 토큰, 키, 공개 전 문서도 안심하고 사용할 수 있습니다.

사용 예시

예: 날씨 예보 API 응답에서 기온과 비 올 확률만 골라내기

공공 API처럼 response.body.items.item 아래에 예보가 배열로 들어 있는 응답입니다(값은 지어낸 것). 항목마다 fcstTime(시각), category(TMP 기온, POP 강수확률), fcstValue(값)가 있고, 값은 "60"처럼 문자열입니다. 0900·1200·1800 세 시각의 TMP와 POP, 모두 6개 항목을 붙여 넣고 결과 표시를 ‘한 줄에 하나씩’으로 둡니다.

  1. $.response.header.resultCode → 00. 응답이 정상인지 먼저 확인합니다.
  2. $.response.body.items.item[?(@.category == "TMP")].fcstValue → 9, 14, 11(일치 3). 작은따옴표로 'TMP'라고 써도 됩니다.
  3. $.response.body.items.item[?(@.category == 'POP' && @.fcstValue >= 60)].fcstTime → 1200, 1800. 값이 문자열 "60"이어도 크기 비교는 숫자로 합니다.
  4. items를 빼먹은 $.response.body.item[*].category는 ‘일치하는 항목이 없습니다.’입니다. $, $.response, $.response.body 순으로 한 단계씩 늘려 보면 어디서 끊기는지 보입니다.
경로 일치 결과
$..fcstTime 60900, 0900, 1200, 1200, 1800, 1800
$.response.body.items.item[0:2].category 2TMP, POP
$.response.body.items.item[-1:] 1마지막 항목 전체(1800 POP 80)
$.response.body.items.item[?(@.category == "TMP" && @.fcstTime =~ /^1/)].fcstValue 214, 11(12시·18시 기온)
$.response.body.items.item[?(@.fcstValue == 60)].fcstTime 11200
$..item[(@.length-1)] —스크립트 표현식이라 실행하지 않고, 쓸 수 있는 형식 목록을 보여 줌

일치 개수가 함께 나오므로 기대한 수(TMP라면 3개)와 다르면 바로 알 수 있습니다. 붙여 넣은 응답은 브라우저 밖으로 나가지 않으니, 외부에 올리기 곤란한 사내 API 응답도 그대로 확인할 수 있습니다.

사용 방법

  1. JSON을 붙여넣습니다.
  2. 경로를 입력합니다. $.users[*].email, $..price, $.items[?(@.qty > 2)].name 등.
  3. 돌아온 내용과 그 위의 개수를 확인합니다.
  4. 다른 곳에 붙여넣을 목록이 필요하면 “한 줄에 하나씩”으로 바꾸세요.

자주 묻는 질문

어떤 방언을 따르나요?
모든 구현에서 공통으로 통하는 부분입니다. 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칸, 탭 중에서 고를 수 있습니다.
서버로 전송되나요?
아니요. 브라우저 안에서만 동작하므로 입력한 내용은 컴퓨터를 벗어나지 않습니다.

관련 도구