JSON Pointer 조회
RFC 6901 JSON Pointer로 JSON 안의 값을 정확하게 조회합니다.
JSON 문서 안에서 /users/0/name처럼 경로 문자열로 지정한 값 하나를 꺼냅니다.
사용 순서
- JSON 데이터를 입력란에 붙여 넣습니다.
- 조회할 위치를 /로 시작하는 포인터로 입력합니다.
- 키에 /나 ~가 있으면 각각 ~1, ~0으로 바꿔 입력합니다.
- 결과가 없다는 오류가 나면 경로의 키와 인덱스를 앞에서부터 하나씩 확인합니다.
예시
{"a/b":{"~key":42}}에 /a~1b/~0key를 입력하면 42가 나옵니다. a/b 키는 ~1로, ~key 키는 ~0으로 표기했습니다.
한계
URI fragment 형식(#로 시작하는 포인터)은 지원하지 않습니다. 배열의 - 인덱스와 선행 0이 있는 인덱스도 받지 않습니다. 객체는 자신의 직접 속성만 조회합니다. 빈 포인터는 문서 전체를 뜻하며, 결과는 들여쓰기된 JSON입니다. 입력과 포인터는 각각 2 MiB까지 받습니다.
보안 주의
포인터가 객체나 배열 전체를 가리키면 그 아래의 모든 값이 결과 창에 펼쳐집니다. 토큰이나 개인정보가 들어 있는 노드를 조회하는 중이라면 화면 공유를 끄고, 필요한 값이 있는 가장 좁은 경로만 지정하세요.
배경 지식
JSON Pointer(RFC 6901)는 JSON 문서의 한 위치를 슬래시로 구분한 문자열로 가리키는 표준입니다. JSON Patch의 대상 지정, 검증 오류의 위치 표시, 설정 값 참조처럼 "이 값의 위치"를 전달해야 할 때 쓰입니다. 포인터는 문자열 하나로 위치를 표현하므로 로그나 오류 메시지에 그대로 넣기 좋습니다.
키 안에 슬래시가 있으면 ~1로, 물결표가 있으면 ~0으로 이스케이프합니다. 디코딩할 때는 ~1을 먼저 풀고 ~0을 나중에 풀어야 합니다. 키가 문자열 ~1이라면 ~01로 써야 하는데, 순서를 거꾸로 하면 이 값이 /로 잘못 바뀌므로 직접 구현할 때 특히 주의해야 합니다.
자주 묻는 질문
배열의 마지막 원소를 가리키는 - 는 쓸 수 없나요?
이 도구에서는 쓸 수 없습니다. "-"는 존재하지 않는 다음 원소를 가리키는 표기라서 조회에는 맞지 않으며, 입력하면 배열 인덱스 오류가 납니다. 마지막 원소가 필요하면 배열 길이를 구한 뒤 숫자 인덱스로 지정하세요.
포인터가 존재하지 않을 때 어떤 오류가 나나요?
없는 키나 범위를 벗어난 인덱스는 missing 오류가 나고, 배열에 숫자가 아닌 키를 쓰면 arrayIndex 오류가 납니다. 두 오류를 구분하면 경로 중 어느 단계에서 틀렸는지 빠르게 찾을 수 있습니다.
URL에서 복사한 #/a/b 형식도 넣을 수 있나요?
넣을 수 없습니다. 포인터는 반드시 /로 시작해야 하며 #이 붙으면 형식 오류가 납니다. URL fragment에서 가져왔다면 앞의 #을 떼고, 퍼센트 인코딩이 있으면 먼저 디코딩한 뒤 입력하세요.