무료 JSONPath 테스터 — 온라인으로 쿼리 평가
온라인 JSONPath 테스터로 어떤 JSON에든 식을 즉시 평가하세요. RFC 9535 표준 + 클래식 Goessner 엔진, 값·경로·정규화 경로 보기, eval 미사용. 100% 비공개.
JSONPath 테스터란?
JSONPath 테스터는 JSONPath 식을 작성하고 JSON 문서를 붙여넣어, 코드를 작성하거나 스크립트를 실행하지 않고도 식이 어떤 노드를 선택하는지 — 일치한 값과 그 정확한 위치를 모두 — 정확히 볼 수 있게 해주는 도구입니다. 개발자에게는 반복 주기를 몇 분에서 몇 밀리초로 단축해줍니다. 경로를 조정하고, 결과 변화를 지켜보고, 확신을 갖고 쿼리를 출시하세요.
JSONPath는 JSON을 위한 쿼리 언어로, XML의 XPath에 대응합니다. 식은 작은 선택자 알파벳으로 구성됩니다. $는 문서의 루트입니다. 점이나 대괄호는 자식으로 들어갑니다: $.store 또는 $['store']. 이중 점 ..은 재귀 하강으로 트리의 모든 레벨을 탐색합니다. 와일드카드 *는 모든 요소나 멤버를 선택합니다. 대괄호는 배열 인덱스([0]), 슬라이스([start:end:step]), 합집합([a,b]), 필터 식([?(@.price < 10)], 여기서 @는 테스트 중인 요소)을 담습니다. 이 조각들로 깊게 중첩된 API 응답에서 단일 필드를 뽑고, 테스트에서 값을 단언하고, Kubernetes·AWS Step Functions·Azure Logic Apps 같은 시스템에서 데이터 변환을 구동하거나, 불규칙한 JSON에서 구조화된 데이터를 추출할 수 있습니다 — 모두 명령형 순회 코드 없이 말이죠. JSONPath는 구현 간 비일관성으로도 유명한데, 바로 그것이 좋은 테스터가 프로덕션에 도달하기 전에 드러내는 문제입니다.
이 테스터는 두 엔진을 제공합니다. 기본값은 RFC 9535 엔진입니다. RFC 9535는 IETF의 2024년 2월 JSONPath 정식 명세로, 15년간의 분산된 구현 끝에 처음으로 언어가 정밀하게 표준화된 것입니다. 정확한 문법, 결과를 위한 정규화 경로 개념, 다섯 개의 표준 함수 — length(), count(), match(), search(), value() — 를 정의합니다. 우리의 RFC 9535 엔진은 eval을 쓰지 않는 의존성 없는 구현으로, 식을 JavaScript로 컴파일하지 않고 자체 문법으로 파싱·해석합니다. 두 번째 엔진은 클래식(Goessner)으로, 대부분의 오래된 온라인 도구와 라이브러리가 구현하는 2007년 사실상의 방언입니다. jsonpath.com 같은 도구의 결과를 재현하거나 레거시 코드에서 복사한 식을 실행하려면 이것으로 전환하세요. 두 방언은 흔한 경로에서는 일치하지만 경계 사례에서 갈라집니다 — 필터 공백과 따옴표, 합집합 순서, 부재 멤버 비교 방식, 존재하는 함수가 그렇습니다 — 그래서 한곳에서 둘을 오갈 수 있다는 것이 식이 예상과 다르게 동작하는 이유를 진단하는 가장 빠른 방법입니다.
테스터가 원시 값을 넘어 드러내는 것: JSONPath 쿼리의 결과는 노드리스트이며, 이 도구는 이를 세 가지 방식으로 보여줄 수 있습니다. 값 보기는 일치한 노드를 JSON 배열로 렌더링하는데, 코드에서 소비하는 바로 그 형태입니다. 경로 보기는 각 일치의 정규화 경로를 렌더링합니다 — 식을 어떻게 작성했든 값이 문서 어디에 있는지 고유하게 식별하는 $['store']['book'][0]['title'] 같은 정규 대괄호 따옴표 위치입니다. 같은 노드를 선택하는 두 식은 같은 정규화 경로를 만들며, 이는 경로 보기를 디버깅에 매우 유용하게 합니다. 둘 다 보기는 값과 경로를 나란히 보여줍니다. 통계 줄은 몇 개 노드가 일치했는지 보고합니다.
보안은 여기서 일급 관심사입니다. 많은 온라인 JSONPath 평가기는 서버에서 실행되거나, JavaScript eval로 필터 술어를 평가하는 라이브러리를 내장합니다 — 널리 쓰이는 JSONPath 패키지에서 CVE-2024-21534와 CVE-2025-1302로 추적되는 원격 코드 실행 취약점을 낳은 설계입니다. 이 도구는 eval을 전혀 쓰지 않습니다. RFC 9535 엔진에는 eval 경로가 없고, 클래식 엔진은 eval이 명시적으로 비활성화된 jsonpath-plus의 패치되고 고정된 릴리스 기반입니다. 그것이 RCE 부류의 버그를 차단하고 도구가 unsafe-eval을 금지하는 엄격한 콘텐츠 보안 정책 아래에서 실행되게 합니다. 모든 평가는 로컬입니다. JSON과 식은 페이지를 결코 떠나지 않고, 기록되지 않으며, 디스크에 저장되지 않습니다 — 엔진과 보기 환경설정만 localStorage에 보존됩니다. 그래서 이 도구는 독점 API 페이로드, 마스킹된 로그, 내부 설정, 그리고 서버 기반 서비스에 붙여넣지 않을 스키마를 가진 어떤 데이터에도 안전합니다.
JSON 다루기가 작업이라면, 사이트의 다른 JSON 도구와 함께 사용하세요: JSON 포맷터로 입력을 포맷·정렬하고, JSON Diff로 두 문서를 비교하고, JSON 스키마 검증기로 페이로드를 스키마와 대조하거나, JSON to TypeScript로 샘플 응답을 타입 인터페이스로 변환하세요.
// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';
const document = {
store: {
book: [
{ title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
{ title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
{ title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
{ title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
]
}
};
// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']
// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']
// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]
// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters 주요 기능
RFC 9535 표준 엔진 (eval 미사용)
기본 엔진은 IETF의 2024 정식 JSONPath 명세인 RFC 9535를 구현합니다 — 정확한 문법, 정규화 경로, 다섯 개의 표준 함수입니다. 의존성이 없고 eval을 쓰지 않으므로 식을 JavaScript로 컴파일하지 않고 자체 문법으로 파싱·해석합니다. 엄격한 콘텐츠 보안 정책 아래에서 실행됩니다.
클래식(Goessner) 호환 모드
토글 하나로 Goessner 호환 엔진(jsonpath-plus 기반, eval 비활성화로 구성)으로 전환되어 jsonpath.com 같은 오래된 도구에서 복사한 식이 거기서 본 대로 동작합니다. RFC 9535와 클래식을 오가며 결과를 비교하고 경로가 방언 간에 다르게 일치하는 이유를 진단하세요.
세 가지 결과 보기: 값, 경로, 둘 다
값은 일치한 노드를 JSON 배열로 렌더링하는데, 코드에서 소비하는 바로 그 형태입니다. 경로는 각 일치의 정규화 경로를 $['store']['book'][0]['title']처럼 렌더링합니다. 둘 다는 둘을 나란히 보여주어 모든 값을 그 정확한 위치에 대응시킬 수 있습니다. 활성 보기는 세션 간에 유지됩니다.
모든 일치에 대한 정규화 경로
각 결과는 정규 대괄호 따옴표 정규화 경로를 함께 갖습니다 — 식을 어떻게 작성했든 노드 위치를 고유하게 식별하는 RFC 9535 방식입니다. 같은 노드를 맞히는 두 식은 같은 정규화 경로를 만들어 모호한 쿼리의 디버깅을 간단하게 합니다.
전체 선택자 지원
루트 $, 현재 요소 @, 자식 .name, 재귀 하강 ..name, 와일드카드 [*], 배열 인덱스 [0], 슬라이스 [start:end:step], 합집합 [a,b], 그리고 비교·논리 연산자가 있는 필터 [?()] 식입니다. 내장 치트 시트가 모든 선택자를 문서화해 찾아보러 페이지를 떠날 일이 없습니다.
RFC 9535 함수 확장
식 안에서 length(), count(), match(), search(), value()를 호출하세요 — 배열 요소를 세고, 문자열을 I-Regexp 패턴과 대조하거나, 중첩 리스트의 크기로 필터링합니다. 이 표준 함수들은 기본 엔진에서 사용 가능하며, 클래식 모드에서 호출하면 도구가 엔진 전환을 안내합니다.
포맷, 업로드 & 예제
JSON 포맷은 쿼리 전에 구조를 읽을 수 있도록 입력을 보기 좋게 정렬합니다. 업로드는 .json 또는 .txt 파일을 브라우저에서 전부 읽습니다 — 어디로도 전송되지 않습니다. 예제 드롭다운은 샘플 데이터에 대한 검증된 시작 식을 불러와 경로를 적용하기 전에 엔진이 동작하는 것을 보여줍니다.
영구 링크 공유 (업로드 없음)
링크 복사는 JSON, 식, 엔진, 보기를 URL 해시로 인코딩합니다. 브라우저는 URL 프래그먼트를 요청에 결코 전송하지 않으므로, 공유 링크는 go-tools.org 서버를 건드리지 않고 수신자의 기기에서 전체 상태를 재현합니다. 자기 완결적이고 협업 디버깅에 감사 친화적입니다.
100% 비공개, 브라우저 전용
JSON과 식은 기기를 결코 떠나지 않습니다. 네트워크 요청도, 로깅도, 입력 내용에 대한 분석도 없습니다 — DevTools → 네트워크에서 확인하세요. 엔진과 보기 환경설정만 localStorage에 보존됩니다. 독점 페이로드, 마스킹된 로그, jsonpath.com에 붙여넣지 않을 어떤 데이터에도 안전합니다.
작업 예제
서점 문서에서 모든 책 제목 선택하기
$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]
고전적인 Goessner 서점 JSON을 붙여넣고 식을 입력하면 값 보기가 네 개 제목 전체를 담은 JSON 배열을 반환합니다. 경로 보기로 전환하면 각 결과가 $['store']['book'][0]['title'] 같은 정규화 경로로 표시됩니다. 와일드카드 [*]는 book 배열의 모든 요소를 순회하고, .title은 각 요소에서 한 멤버를 투영합니다.
필터 식으로 가격이 10 미만인 책 거르기
$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]
필터 선택자 [?()]는 술어가 참인 배열 요소만 남깁니다. @는 현재 요소입니다. 서점 데이터(가격 8.95, 12.99, 8.99, 22.99)에 대해 두 책이 조건을 만족합니다. 두 엔진 모두 이 형식을 받아들이지만, 클래식(Goessner)은 같은 필터를 [?(@.price<10)]로 쓴다는 점에 유의하세요. 오래된 도구에서 식을 복사했다면 엔진을 전환하세요.
재귀 하강으로 트리 전체 탐색하기
$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]
.. 연산자는 문서의 모든 레벨로 하강하며 중첩 깊이와 무관하게 author 멤버가 나타나는 곳마다 수집합니다. 재귀 하강은 깊게 중첩되었거나 불규칙한 구조에서 전체 경로를 일일이 적지 않고 특정 필드를 뽑아내는 가장 빠른 방법입니다.
[start:end:step]로 배열 슬라이스하기
$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]
배열 슬라이스는 Python·JavaScript와 동일한 반열림 [start:end] 규칙을 따릅니다. 인덱스 0부터 2 직전까지가 처음 두 책을 반환합니다. 세 번째 필드를 더하면 스텝이 됩니다 — $.store.book[::2]는 한 칸 건너 요소를 가져옵니다. 끝 경계는 배타적이며, 흔한 오프바이원 함정을 경로 보기가 명확히 드러냅니다.
RFC 9535 length() 함수로 제목 길이 필터링하기
$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}] length()는 RFC 9535 표준 함수 다섯 개 중 하나로, 필터 식 [?...] 안에서만 유효합니다 — $.store.book.length() 같은 독립 경로 세그먼트로는 쓸 수 없으며 RFC 9535 문법이 거부합니다(그 세그먼트 형식은 표준 JSONPath가 아니라 jsonpath-plus 확장입니다). 여기서 필터는 제목이 15자보다 긴 책만 남깁니다. 서점 데이터에서는 15자를 넘는 제목이 선택되고(예: "Sayings of the Century", "The Lord of the Rings"), "Moby Dick"이나 "Sword of Honour"처럼 짧은 것은 제외됩니다. count(), match(), search(), value()도 마찬가지로 필터 안에서 사용합니다. 이 함수들은 RFC 9535 기능이므로 표준 엔진(기본값)으로 전환해 사용하세요. 클래식(Goessner) 모드는 이를 구현하지 않습니다.
이름 있는 두 멤버의 합집합 선택하기
$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]
합집합 선택자 [a,b]는 한 식으로 여러 자식을 모읍니다. 여기서는 첫 번째 책의 title과 author를 함께 가져옵니다. 합집합은 배열 인덱스에도 동작합니다 — [0,2]는 첫 번째와 세 번째 요소를 잡습니다. 둘 다 보기는 각 값을 정규화 경로와 짝지어 어떤 멤버가 어떤 결과를 만들었는지 정확히 보여줍니다.
JSONPath 테스터 사용법
- 1
JSON을 붙여넣거나 업로드하기
JSON을 입력 상자에 끌어다 놓거나 붙여넣거나, 업로드를 클릭해 디스크의 .json / .txt 파일을 불러오세요. JSON 포맷이 문서를 다시 들여씁니다. 유효하지 않은 JSON은 쿼리 전에 파서 메시지와 함께 인라인으로 표시됩니다.
- 2
엔진 선택하기
RFC 9535(2024 IETF 표준, eval 미사용)가 기본값입니다. jsonpath.com 같은 오래된 도구에서 복사한 식을 실행할 때는 클래식(Goessner)으로 전환해 거기서 본 결과와 일치하게 하세요.
- 3
JSONPath 식 입력하기
선행 $는 미리 표시됩니다. .store.book[*].title 같은 자식 경로, [0] 같은 인덱스, ..author 같은 재귀 하강, [?(@.price < 10)] 같은 필터로 시작하세요. 입력하는 대로 결과가 실시간으로 갱신됩니다.
- 4
결과 보기 전환하기
값은 일치한 값의 JSON 배열을 보여줍니다. 경로는 각 일치의 정규화 경로를 $['store']['book'][0]['title']처럼 보여줍니다. 둘 다는 둘을 나란히 보여주어 모든 값을 문서 내 정확한 위치에 대응시킬 수 있습니다.
- 5
결과 복사 또는 영구 링크 공유하기
결과 복사는 출력을 클립보드에 담습니다. 링크 복사는 JSON, 식, 엔진, 보기를 URL 해시로 인코딩하므로(업로드 없음) 동료가 자신의 기기에서 정확히 같은 쿼리를 로컬로 재현할 수 있습니다.
흔한 JSONPath 실수
선행 $ 루트를 빠뜨림
모든 JSONPath 식은 루트에서 시작하며 $로 씁니다. 이를 생략하면(또는 $가 암묵적인 것처럼 경로를 쓰면) 대부분의 엔진이 식을 거부합니다. 테스터가 $를 미리 표시하므로 다음 선택자 — 점, 대괄호, 또는 재귀 하강 — 로 입력을 시작하세요.
store.book[*].title → invalid (no root)
$.store.book[*].title → selects every title
오프바이원 슬라이스 — 끝 인덱스가 포함될 것으로 기대
슬라이스는 반열림입니다. [start:end]는 end 직전까지 진행합니다. [0:2]는 세 개가 아니라 두 요소(인덱스 0과 1)를 반환합니다. 마지막 요소를 인덱스로 포함하려면 [start:]를 쓰거나 끝 경계를 하나 더 밀어내세요.
$.store.book[0:2] → first TWO books, not three
$.store.book[0:3] → first three books (indices 0,1,2)
RFC 9535 엔진에서 클래식 식을 사용함(또는 그 반대)
jsonpath.com이나 jsonpath-plus에서 복사한 식은 필터, 합집합, 함수 차이 때문에 RFC 9535 아래에서 다르게 파싱되거나 일치할 수 있습니다. 결과가 잘못되어 보이면 엔진 토글을 식이 작성된 방언에 맞게 전환하세요.
Classic filter run under RFC 9535 → parse error or unexpected nodes
Switch engine to Classic (Goessner) → reproduces the original result
RFC 9535 함수를 독립 세그먼트로 호출함
length(), count(), match(), search(), value()는 필터 [?...] 안에서만 유효한 RFC 9535 함수 확장입니다. $.store.book.length() 같은 독립 세그먼트 호출은 RFC 9535 문법이 거부합니다(이는 표준이 아니라 jsonpath-plus 확장입니다). 함수를 필터 안에서 호출하고 기본 RFC 9535 엔진을 쓰세요 — 클래식(Goessner) 엔진은 이 함수들을 구현하지 않습니다.
$.store.book.length() → parse error (not a valid RFC 9535 segment)
$.store.book[?length(@.title) > 15] → books with a title over 15 chars
필터 식 안에서 @를 빠뜨림
필터 [?()] 안에서 현재 요소는 $가 아니라 @입니다. $.price를 쓰면 테스트 중인 요소가 아니라 문서 루트를 다시 가리키므로 필터가 아무것도 또는 전부를 선택합니다. 필터되는 요소의 멤버를 지정하려면 @를 쓰세요.
$.store.book[?($.price < 10)] → wrong scope
$.store.book[?(@.price < 10)] → books under 10
멤버 이름을 잘못된 구문으로 따옴 처리함
대괄호 표기는 문자열 키에 따옴표가 필요합니다. $['store']와 $.store는 모두 동작하지만 $[store](대괄호 안 따옴표 없음)는 인덱스/식별자 오류입니다. 공백, 점, 특수 문자가 있는 키는 대괄호 안에서 따옴표를 쓰세요: $['first name'].
$[store][book] → invalid bracket selectors
$['store']['book'] → same as $.store.book
재귀 하강이 첫 레벨에서 멈출 것으로 기대
$..author는 최상위에서 멈추지 않습니다 — 모든 깊이에서 모든 author 멤버를 수집합니다. 직접 자식만 원한다면 경로를 명시하세요. 큰 문서에 대한 재귀 하강은 의도보다 훨씬 많은 노드를 반환할 수 있습니다.
$..price → every price anywhere in the tree
$.store.book[*].price → only book prices
이 도구를 누가 사용하나요
- API 응답에서 필드 추출하기
- 순회 코드를 작성하지 않고 JSON 페이로드에서 요청 ID, 중첩 리소스 속성, 또는 이름 목록을 뽑아내세요. 여기서 샘플 응답에 대해 경로를 만들고, 값 보기에서 원하는 노드를 정확히 반환하는지 확인한 뒤, 검증된 식을 애플리케이션이나 테스트에 붙여넣으세요.
- 통합 테스트용 단언 작성하기
- 많은 테스트 프레임워크와 계약 테스트 도구(REST Assured, Karate, Postman)가 응답 본문을 단언하는 데 JSONPath를 씁니다. 여기서 단언 경로를 초안하고, 실제 응답에 대해 올바른 노드를 선택하는지 검증한 뒤 테스트에 복사하세요 — 스위트가 실패하기 전에 잘못된 경로를 잡습니다.
- 파이프라인에서 데이터 변환 설정하기
- Kubernetes, AWS Step Functions, Azure Logic Apps, 그리고 많은 ETL 도구가 이벤트 페이로드의 필드를 지정하는 데 JSONPath를 받아들입니다. 여기서 대표 이벤트에 대해 정확한 경로를 프로토타이핑하고, 해석되는지 확인한 뒤, 의도한 곳을 가리킨다는 확신을 갖고 파이프라인 설정에 넣으세요.
- jsonpath.com 결과를 비공개로 재현하기
- 서버 기반 평가기의 식이 있지만 제3자 사이트에 데이터를 붙여넣을 수 없나요? 클래식(Goessner) 모드로 전환하고 JSON을 불러와 같은 결과를 로컬에서 재현하세요 — 페이로드가 브라우저를 결코 떠나지 않으므로 독점 데이터가 기기에 머뭅니다.
- 레거시 식을 RFC 9535로 마이그레이션하기
- RFC 9535 준수를 표방하는 시스템으로 이전하나요? 레거시 식을 클래식 모드에서 실행한 뒤 RFC 9535 엔진으로 전환해 여전히 파싱되고 같은 노드와 일치하는지 보세요. 듀얼 엔진 비교는 프로덕션에서 부딪힐 필터, 합집합, 함수 차이를 짚어냅니다.
- 경로가 잘못된 노드를 반환하는 이유 디버깅하기
- 너무 많이 또는 너무 적게 선택하는 경로는 값만 보고 추론하기 어렵습니다. 경로 보기로 전환해 모든 일치의 정규화 위치 — 정확한 배열 인덱스, 정확한 멤버 사슬 — 를 보면 오프바이원 슬라이스나 빗나간 재귀 하강이 즉시 명확해집니다.
- JSONPath 가르치거나 검토하기
- 샘플 데이터에 대해 동작하는 식을 열어 선택자 하나하나 짚어가며, 값과 경로를 오가 학습자가 무엇이 선택되고 어디에 있는지 모두 보게 하세요. 치트 시트와 작업 예제가 코드 리뷰나 온보딩을 위한 구조화된 참조를 제공합니다.
엔진 & 알고리즘 참고
- RFC 9535 엔진 (jsonpath-rfc9535, 의존성 없음)
- 기본 엔진은 IETF RFC 9535 문법을 직접 구현합니다. 식을 토큰화·파싱하여 추상 구문 트리로 만들고 문서에 대해 해석합니다. 경로 어디에도 eval이나 Function 생성자가 없으므로 eval 주입 부류의 버그에 면역이며 엄격한 콘텐츠 보안 정책 아래에서 실행됩니다.
- 클래식 엔진 (jsonpath-plus, eval 비활성화)
- 클래식(Goessner) 엔진은 패치 릴리스(>= 10.4.0)에 고정되고 eval 옵션이 명시적으로 false로 설정되어 구성된 jsonpath-plus입니다. 이는 Goessner 방언 호환성을 유지하면서 라이브러리의 기본 eval 기반 필터 경로에 영향을 준 CVE-2024-21534와 CVE-2025-1302로 추적되는 원격 코드 실행 벡터를 차단합니다.
- 정규화 경로 생성
- 모든 일치는 RFC 9535 정규화 경로와 함께 보고됩니다 — 작은따옴표 대괄호 표기($['store']['book'][0]['title'])를 쓰고 배열 인덱스는 정수 그대로 두는 정규 형식입니다. 정규화 경로는 노드별로 안정적이고 고유하므로 동등한 식이 동일한 경로를 산출하며, 경로 보기와 둘 다 보기가 모호하지 않은 결과 식별을 위해 이에 의존합니다.
- 지연 로드 엔진 청크
- 두 엔진 모두 처음 선택될 때만 별도의 JavaScript 청크로 로드되므로 초기 페이지가 가볍게 유지되고 쓰지 않는 엔진은 결코 다운로드되지 않습니다. 엔진 전환은 페이지 새로고침 없이 현재 식을 현재 문서에 대해 즉시 다시 평가합니다.
- 로컬 파일 읽기 및 JSON 포맷팅
- 업로드 버튼은 브라우저 FileReader API로 .json 또는 .txt 파일을 전적으로 클라이언트 측에서 입력으로 읽습니다 — 파일은 결코 전송되지 않습니다. JSON 포맷은 입력을 두 칸 들여쓰기로 파싱·재직렬화하며, 파싱 오류를 인라인으로 드러내 잘못된 형식의 JSON이 평가 전에 잡힙니다.
- URL 해시를 통한 영구 링크 (전송되지 않음)
- 공유 상태는 location.hash 프래그먼트에 인코딩되어 JSON, 식, 활성 엔진, 결과 보기를 담습니다. 브라우저는 프래그먼트를 HTTP 요청에 결코 포함하지 않으므로, 영구 링크가 열릴 때 go-tools.org 서버는 데이터를 0건 수신합니다. 복원은 전적으로 수신자의 기기에서 일어납니다.
JSONPath 모범 사례
- 대상에 맞는 엔진 선택하기
- 다운스트림 시스템이 RFC 9535 준수를 표방하면 RFC 9535 엔진으로 작성·검증하세요. 오래된 도구나 라이브러리의 식을 재현하거나 유지보수한다면 클래식(Goessner)을 쓰세요. 잘못된 방언으로 검증하는 것이 테스터에서 동작한 경로가 프로덕션에서 실패하는 가장 흔한 이유입니다.
- 값뿐 아니라 경로 보기로 검증하기
- 값 보기는 무엇이 일치했는지 알려주고, 경로 보기는 어디인지 알려줍니다. 쿼리가 그럴듯한 값을 반환해도 잘못된 위치에서 선택하고 있을 수 있습니다 — 빗나간 재귀 하강이나 지나치게 넓은 와일드카드 말이죠. 정규화 경로를 확인해 식이 의도한 노드를 정확히 맞히는지 확인하세요.
- 슬라이스의 배타적 끝에 유의하기
- [0:2]는 인덱스 0과 1을 선택하며 0부터 2까지가 아닙니다 — 끝 경계는 Python·JavaScript와 마찬가지로 배타적입니다. 오프바이원 슬라이스 오류는 가장 빈번한 JSONPath 버그입니다. 경로 보기로 선택된 모든 요소의 정확한 인덱스를 읽고 출시 전에 경계를 확인하세요.
- 가능하면 재귀 하강보다 명시적 경로 선호하기
- $..price는 편하지만 의도하지 않은 것을 포함해 문서 어디에 있는 price든 일치시킵니다. 구조를 알 때는 경로를 명시하세요($.store.book[*].price) — 데이터가 커져도 쿼리가 정밀하고 예측 가능하게 유지됩니다. ..은 진정으로 불규칙하거나 알 수 없는 형태에만 남겨두세요.
- 필터에서 공백과 따옴표를 일관되게 유지하기
- RFC 9535는 필터 식에 문법을 정확히 따르는 반면 클래식 방언은 더 느슨합니다. 필터를 깔끔하게 쓰세요 — 문자열 리터럴을 작은따옴표('fiction')로 감싸고, 연산자에 공백을 두며, 관대한 파싱에 의존하지 마세요 — 그러면 어떤 엔진이나 라이브러리가 결국 실행하든 같은 식이 같은 방식으로 평가됩니다.
자주 묻는 질문
제 JSON이나 JSONPath 식이 서버로 전송되나요?
JSONPath란 무엇이며 어디에 사용하나요?
RFC 9535와 클래식 Goessner 구문의 차이는 무엇인가요?
같은 식이 두 엔진에서 다른 결과를 반환하는 이유는? jsonpath.com에서 복사한 식은 어떻게 쓰나요?
필터 식 [?()]는 어떻게 동작하나요?
재귀 하강(..)은 무엇을 하나요?
RFC 9535 함수 length(), count(), match(), search(), value()는 무엇인가요?
배열 슬라이스 [start:end:step]는 어떻게 동작하나요?
합집합 선택자란 무엇이며 여러 키를 한 번에 선택하려면 어떻게 하나요?
JSONPath 쿼리와 그 JSON을 링크로 공유할 수 있나요?
JSON 최대 크기가 있나요?
jsonpath.com과 어떻게 다르며 안전한가요 — eval 미사용인가요?
값, 경로, 둘 다 보기는 무엇을 보여주나요?
오프라인에서 동작하나요? 콘텐츠 보안 정책은 어떤가요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
Base64 이미지 변환기 (온라인)
인코딩 & 포매팅
Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.
CSV to JSON 변환기 (CSV to JSON Converter)
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
.env을 JSON으로 변환하는 도구
인코딩 & 포매팅
.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.
HTML to Markdown 변환기
인코딩 & 포매팅
브라우저에서 HTML을 깔끔한 Markdown으로 변환 — GFM 테이블·작업 목록·링크, ATX/Setext와 인라인·참조 링크 선택. 웹 이전·LLM 입력에 적합. 100% 비공개.
이미지 Base64 변환기 (온라인)
인코딩 & 포매팅
이미지를 온라인 브라우저에서 Base64 데이터 URI로 변환합니다 — PNG, JPG, SVG, ICO. HTML, CSS, Markdown, JSON 출력을 복사하세요. 100% 비공개, 업로드 없음.