JSON 포인터 리졸버 (RFC 6901)
JSON 포인터는 /user/roles/0 같은 슬래시 구분 경로로 JSON 문서 안의 한 값을 가리키는 표준(RFC 6901) 방식입니다. JSON Schema $ref, JSON Patch, JSON Merge Patch, 많은 OpenAPI 도구가 내부적으로 이를 사용합니다. 문서와 포인터를 붙여넣으면 어떤 값을 선택하는지 보기 좋게 출력합니다. 리졸버는 스펙을 정확히 구현합니다: 빈 포인터는 전체 문서를 반환하고, ~1은 리터럴 슬래시, ~0은 리터럴 틸드를 뜻하므로(따라서 "a/b" 키는 /a~1b로 접근), 배열 인덱스는 0이거나 선행 0 없는 부호 없는 정수여야 하며, 특수 토큰 "-"는 읽기 시 값이 없습니다. URI 프래그먼트 포인터(#/user/roles/0)도 받아 퍼센트 디코딩합니다. 또한 문서 내 모든 포인터를 값 미리보기와 함께 나열해, 클릭으로 임의 노드의 정확한 경로를 찾을 수 있습니다. 모든 처리는 로컬에서 실행되며 업로드되지 않습니다.
해석된 값
"admin"
이 문서의 포인터 (클릭하여 사용)
| (루트) | {…} (3) |
| /user | {…} (3) |
| /user/id | 42 |
| /user/name | "Ada" |
| /user/roles | […] (2) |
| /user/roles/0 | "admin" |
| /user/roles/1 | "editor" |
| /a~1b | "slash in key" |
| /settings | {…} (2) |
| /settings/theme | "dark" |
| /settings/limits | {…} (1) |
| /settings/limits/max | 100 |
빈 포인터 = 전체 문서. 키의 /는 ~1, ~는 ~0으로 이스케이프. #/a/b 같은 URI 프래그먼트도 가능.
사용법
- JSON 문서를 붙여넣거나 편집.
- JSON 포인터 입력(예: /user/name 또는 #/settings/limits/max)하거나 포인터 목록의 행 클릭.
- 해석된 값을 읽으세요. 키 안의 슬래시는 ~1, 틸드는 ~0으로 이스케이프합니다.
자주 묻는 질문
- JSON 포인터는 JSONPath와 어떻게 다른가요?
- JSON 포인터(RFC 6901)는 단순한 슬래시 구분 경로로 정확히 한 값을 가리키며 JSON Schema·JSON Patch·OpenAPI가 사용합니다. JSONPath는 와일드카드·필터·재귀 하강으로 여러 값을 매칭할 수 있는 쿼리 언어입니다. 전자는 이 도구를, 후자는 JSONPath 테스터를 쓰세요.
- ~0과 ~1은 무엇인가요?
- /가 토큰을 구분하고 ~가 이스케이프 문자이므로, 키 안의 리터럴 /는 ~1, 리터럴 ~는 ~0으로 씁니다. 따라서 "a/b" 멤버는 /a~1b로, "m~n"은 /m~0n으로 접근합니다. 언이스케이프 시 ~1을 ~0보다 먼저 치환하는데, RFC가 요구하는 그대로입니다.
- 빈 포인터는 무엇을 반환하나요?
- 빈 문자열은 전체 문서를 가리키는 유효한 포인터이므로 전체 JSON 값을 반환합니다. "/"는 비어 있지 않습니다 — 빈 문자열 토큰 하나를 가진 포인터로, 키가 빈 문자열인 멤버를 선택합니다.
- 포인터 해석이 왜 실패했나요?
- 흔한 이유: 멤버나 배열 인덱스가 없음, 배열 인덱스에 선행 0이 있음(0, 1, 2…만 유효, 패딩 불가), "-" 사용(읽기 시 값 없음), 또는 비어 있지 않은 포인터가 /로 시작하지 않음. 오류 메시지가 실패한 토큰을 정확히 알려 줍니다.
관련 도구
JSON Patch 빌더 (RFC 6902)
source/target 쌍에서 RFC 6902 JSON Patch 생성, 또는 기존 patch를 문서에 적용. add·remove·replace·move·copy·test 작업 지원.
JSONPath 테스터
JSON 문서에 대해 JSONPath 쿼리(`$.store.book[*].author`, `$..price`) 실행, 일치 값 확인.
Quoted-Printable 인코더 & 디코더
텍스트를 MIME Quoted-Printable(RFC 2045)로 인코딩하거나 다시 디코딩 — =XX 이스케이프·소프트 줄바꿈·UTF-8 처리, 인코딩 시 76자 줄바꿈 — 브라우저에서.
JWK ↔ PEM 변환기
JWK이나 JWKS 전체를 PEM 공개키로, 또는 그 반대로 변환하고 각 키의 RFC 7638 thumbprint까지 브라우저에서 계산합니다.
Punycode 변환기
국제화 도메인을 Unicode(`münchen.de`)와 Punycode ASCII(`xn--mnchen-3ya.de`) 간 변환.
Base32 인코더 / 디코더
Base32(RFC 4648) 인코딩·디코딩 — Standard와 base32hex 변형 지원. TOTP secret이나 Crockford 스타일 ID에 유용.