Base64를 JSON으로 디코딩하는 방법
- 입력 · Base64에 Base64를 붙여넣으세요. 페이지를 열면 바꿔 넣을 수 있는 예시가 들어 있습니다.
- 출력 · 텍스트에 공백 2칸으로 들여쓰기된 JSON이 나타납니다. JSON 보기 좋게 정렬은 기본으로 켜져 있으며, 해제하면 디코딩된 텍스트를 그대로 볼 수 있습니다.
- 상태 표시줄을 확인하세요. 추정 형식이 JSON이면 결과가 올바른 JSON으로 파싱되었다는 뜻입니다.
- 출력 복사는 정렬된 JSON을 복사합니다. 다운로드는 디코딩된 원래 바이트를
decoded.json으로 저장합니다.
예시 eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJkZWNvZGUiXSwiYWN0aXZlIjp0cnVlfQ==는 디코딩하고 정렬하면 다음과 같습니다.
{
"id": 42,
"name": "base64hub",
"tags": [
"json",
"decode"
],
"active": true
}
반대 방향은 JSON을 Base64로를 사용하세요.
Base64 속 JSON 알아보기
JSON은 거의 항상 {나 [로 시작하며, 이 바이트들은 알아보기 쉬운 몇 가지 시작 부분을 만듭니다.
| Base64 시작 부분 | 디코딩된 시작 부분 | 주요 출처 |
|---|---|---|
eyJ | {" + 영문자 | 압축된 객체, JWT 헤더와 페이로드 |
eyI | {" + 숫자나 기호 | 첫 키가 숫자로 시작하는 객체 |
eyAi | { " | 공백이 있는 객체 |
ewog | { + 줄 바꿈 + 공백 | 보기 좋게 정렬된 파일 |
W3s | [{ | 객체 배열 |
WyJ | [" + 영문자 | 문자열 배열 |
따라서 eyJhIjoxfQ==는 {"a":1}이고 W3siYSI6MX1d는 [{"a":1}]입니다. 다른 형식의 패턴은 자주 보는 Base64 접두사 페이지에 더 있습니다.
Base64로 인코딩된 JSON이 나오는 곳
- JSON Web Token(JWT)의 헤더와 페이로드는 점으로 구분된 Base64URL 인코딩 JSON입니다. 구간 하나를 여기에 붙여넣거나, 토큰 전체를 JWT 디코더에 넣으세요. 형식은 JWT 속 Base64에서 설명합니다.
- 일부 API와 웹훅은 구조화된 메타데이터, 페이지네이션 커서, 이벤트 페이로드를 다른 JSON 문서 안의 Base64 문자열로 넘깁니다. 바깥 문서가 있다면 JSON 안의 Base64 디코딩이 그런 필드를 한 번에 모두 찾아 디코딩합니다.
- Kubernetes
.dockerconfigjsonSecret은 컨테이너 레지스트리 자격 증명을 JSON 문서의 Base64로 저장하고, 그 JSON에는 다시 Base64auth값이 들어 있습니다. Docker config JSON 디코더가 두 층을 모두 풉니다. - 환경 변수와 CI 시크릿은 따옴표 문제를 피하려고 JSON 설정을 Base64 한 줄로 담는 경우가 많습니다.
URL-safe 입력(-와 _, 패딩 없음)도 자동으로 받으므로 토큰 구간을 그대로 디코딩할 수 있습니다.
JSON이 정렬되지 않을 때
보기 좋게 정렬하려면 올바른 JSON이어야 합니다. 파싱에 실패하면 디코딩된 텍스트가 그대로 표시되며, 대개 그것만 봐도 문제를 알 수 있습니다.
- 데이터가 잘려 텍스트가 값 중간에서 끝납니다. Base64 문자열 전체를 복사했는지 확인하세요. 줄 바꿈이나 따옴표가 섞여 들어갔다면 Base64 복구가 도움이 됩니다.
- 텍스트가 온전한 JSON이 아닙니다. 작은따옴표, 끝에 남은 쉼표(
{"a":1,}는eyJhIjoxLH0=), 주석은 손으로 쓴 설정에서 흔하지만 JSON에서는 올바르지 않습니다. - 문자 인코딩이 잘못되었습니다. JSON은 정의상 UTF-8이므로(RFC 8259), 한글이나 악센트 문자가 깨진다면 만든 쪽이 EUC-KR 같은 다른 인코딩을 쓴 것이니 문자 인코딩을 바꿔 보세요.
- 페이로드가 압축되어 있습니다. 출력을 읽을 수 없고 Base64가
H4sI로 시작한다면 인코딩 전에 JSON을 gzip으로 압축한 것입니다. gzip Base64 디코더를 사용하세요.
코드에서 Base64를 JSON으로
import base64, json
s = "eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJkZWNvZGUiXSwiYWN0aXZlIjp0cnVlfQ=="
data = json.loads(base64.b64decode(s))
print(json.dumps(data, indent=2))
json.loads는 바이트를 그대로 받습니다. JavaScript에서는 JSON.parse(atob(s))가 비 ASCII 문자를 깨뜨리므로, 바이트로 디코딩한 다음 TextDecoder를 거치세요.
const s = "eyJuYW1lIjoiYmFzZTY0aHViIn0=";
const json = new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
JSON.parse(json).name; // "base64hub"
URL-safe 변형은 Python에서 Base64와 JavaScript에서 Base64를 참고하세요.
자주 묻는 질문
Base64를 JSON으로 디코딩하려면 어떻게 하나요?
위에 Base64를 붙여넣으세요. 디코딩된 JSON이 보기 좋게 정렬되고, 다운로드를 누르면 decoded.json으로 저장됩니다. 코드에서는 Python의 json.loads(base64.b64decode(s)), Node.js의 JSON.parse(Buffer.from(s, "base64").toString())를 쓰세요.
JSON이 정렬되지 않는 이유는 무엇인가요?
디코딩된 텍스트가 올바른 JSON이 아니어서 그대로 표시되는 것입니다. 흔한 원인은 잘린 문자열, 작은따옴표, 끝에 남은 쉼표, 주석입니다. 이때 “추정 형식” 필드에는 JSON이 아니라 텍스트로 표시됩니다.
Base64 문자열이 JSON인지 어떻게 아나요?
대부분의 JSON 객체는 {" 다음에 영문자가 오는 형태라서 eyJ로 시작하는 문자열로 인코딩됩니다. 객체 배열은 W3s로, 보기 좋게 정렬된 JSON은 흔히 ewog로 시작합니다.
여기서 JWT 페이로드를 디코딩할 수 있나요?
네, 가운데 구간(두 점 사이)을 붙여넣으세요. 만료 시각과 서명 검증까지 포함해 토큰 전체를 보려면 JWT 디코더를 사용하세요.