도구
가이드

JSONPath 쿼리

JSON

JSON 문서에서 JSONPath / jq 스타일 쿼리를 실행하고 모든 일치 항목을 강조 표시합니다.

100% 클라이언트 백엔드 없음

원격 URL은 가져오지 않습니다. JSON을 직접 붙여넣으세요.

입력
일치 항목
JSON 일치 값이 강조 표시됨
JSON과 JSONPath 표현식을 붙여넣어 일치 항목을 평가하세요.
이 페이지에서

JSONPath 테스터란?#

JSON 문서가 작으면 눈으로 읽습니다. 몇천 줄이 되면(API 응답, 설정 덤프, 의존성 트리) 눈은 더 이상 올바른 도구가 아닙니다. JSONPath는 바로 그 상황을 위한 쿼리 언어입니다. “모든 price 필드를 줘”, “10보다 싼 책의 제목”, “얼마나 깊이 묻혀 있든 isbn이라는 모든 노드”라고 말하는 간결한 표현식입니다.

파일 경로와 작은 필터 언어의 혼합으로 생각하면 됩니다. $.store.book[0].title은 파일시스템 경로가 그렇듯 알려진 구조를 따라 내려갑니다. $..author는 “재귀적으로 내려가며 찾은 모든 author를 모아라”고 합니다. [?(@.price < 10)]은 필터입니다. 현재 노드의 price가 10 미만인 요소만 유지합니다. @는 항상 “내가 지금 보고 있는 노드”를 뜻합니다.

이 페이지는 JSONPath 표현식을 JSON에 실행해 모든 일치 항목을 나열하고, 가장 시간을 아껴주는 부분으로, 포맷된 문서에 일치 범위를 직접 강조하여 내 표현식이 내가 생각한 것을 선택했는지 한눈에 보게 해 줍니다. 필터는 안전한 표현식 파서로 평가되며, 결코 코드를 실행하지 않아 신뢰할 수 없는 덩어리가 아무것도 실행할 수 없습니다.

사용 방법#

  1. 왼쪽 입력 패널에 JSON을 붙여넣거나, 예제 를 눌러 고전적인 서점 픽스처를 불러오세요.
  2. 오른쪽 JSONPath 필드에 JSONPath 표현식을 타이핑하세요. 흔한 출발점:
    • $.store.book[*].author — 모든 배열 요소의 author.
    • $..author — 재귀 하강: 어디든 모든 author.
    • $.store.book[?(@.price < 10)].title — 필터 표현식.
    • $.store.book[?(@.isbn)].isbn — 존재 테스트(isbn 키를 가졌는지).
  3. 필드 아래 일치 항목 목록이 결과마다 한 항목씩 채워지고, 아래 전체 너비의 JSON 미리보기 가 일치한 모든 구간을 제자리에 강조합니다.
  4. 일치 항목 옆 헤더가 카운트를 보여줍니다. 0개 노드를 일치시키는 표현식도 여전히 성공(빈 목록)으로 보고합니다. 구문이 깨진 표현식만 오류를 보여줍니다.
  5. 도구 모음의 일치 항목 복사 로 일치 값을 JSON 배열로 가져가거나, 지우기 로 양쪽 패널을 초기화하세요.

쿼리는 타이핑하는 대로 발사됩니다. JSON 자체가 잘못되면 상태 표시줄이 고칠 정확한 행과 열을 가리킵니다.

주요 기능#

  • 제자리 강조. 일치한 모든 값이 포맷된 문서 위에 겹쳐져, 30개 노드를 잡는 재귀적 $..가 목록에 묻히지 않고 즉시 보입니다.
  • 안전한 필터 평가. [?(@.price < 10)] 같은 표현식은 동적 코드 실행에 넘겨지지 않고 표현식 평가기로 파싱됩니다. 적대적 입력에서도 페이지는 CSP 안전을 유지합니다.
  • “일치 없음”과 “오류” 구분. 아무것도 선택하지 않는 올바른 표현식은 0개 일치로 보고됩니다. malformed 표현식만 오류로 표시됩니다. “아무것도 찾지 못함”과 “깨짐”을 결코 혼동하지 않습니다.
  • 일치마다 포인터. 각 결과는 JSON Pointer(예: /store/book/2/title)를 달고 있어 트리 어디서 값이 왔는지 정확히 압니다.
  • 배열로 복사. 일치 값은 깨끗한 JSON 배열로 내보내져 다음 단계로 바로 넘길 수 있습니다.
  • 로컬 전용. 데이터는 브라우저에서 쿼리됩니다. 백엔드도, 업로드도 없습니다.

실전 예시#

예제 를 불러온 뒤, 싼 책의 제목을 찾는 필터를 실행하세요. JSONPath 필드에 이것을 입력합니다.

$.store.book[?(@.price < 10)].title

일치 목록은 두 제목을 반환합니다. 픽스처의 네 권 중 두 권만 10 미만의 가격이기 때문입니다.

[
  "Sayings of the Century",
  "Moby Dick"
]

JSON 미리보기는 그 두 title 값을 제자리에 강조하고, 나머지 두 권이 제외된 이유를 보여줍니다. Sword of Honour(12.99)와 The Lord of the Rings(22.99)는 임계값 위에 있습니다. ISBN을 가진 책을 찾으려면 존재 테스트로 바꾸세요.

$.store.book[?(@.isbn)].isbn

두 ISBN 문자열만 반환합니다. 필터가 실제로 isbn 키를 가진 요소만 유지하기 때문입니다. 이는 부정해 “어떤 레코드가 필드가 빠졌는지” 찾는 데 유용한 패턴입니다.

FAQ#

$@의 차이는?#

$는 문서의 루트, 사용자가 붙여넣은 전체 JSON 값입니다. @는 필터 안에서 고려 중인 현재 노드입니다. 그래서 [?(@.price < 10)]에서 @는 필터가 지금 테스트 중인 책을 가리킵니다. 거기에 $.price를 쓰면 루트로 돌아가 존재하지 않는 최상위 price를 찾습니다.

내 표현식이 아무것도 일치시키지 않습니다. 버그인가요?#

아마 아닙니다. 0개 노드를 선택하는 올바른 표현식은 빈 결과를 가진 성공적인 쿼리입니다. 예를 들어 샘플에서 $.store.book[?(@.price > 1000)]은 단순히 그렇게 비싼 책이 없다는 뜻입니다. 헤더는 오류 없이 “0개 일치”로 표시됩니다. 표현식 자체가 파싱 불가능할 때만 오류를 보고합니다.

왜 필터가 임의의 JavaScript를 실행하지 않나요?#

필터는 비교, 불리언 연산자, @ 참조를 이해하는 전용 표현식 파서로 평가됩니다. 코드를 만들어 실행하지 않습니다. 이는 의도적입니다. 완전히 신뢰하지 않는 JSON에 대해 도구가 안전하게 작동하고, 페이지를 브라우저의 콘텐츠 보안 정책 안에 머물게 합니다.

JSONPath로 노드를 편집하거나 제거할 수 있나요?#

아니요. 읽기 전용 쿼리 도구입니다. 선택하고 표시하며, JSON을 변경하지 않습니다. 두 문서가 어떻게 다른지 보고 싶다면 대신 /en/json/diff/ 도구를 쓰세요.