파일 업로드
  1. base64hub
  2. 텍스트 도구
  3. JSON → Base64

JSON을 Base64로: JSON 페이로드 인코딩

JSON을 붙여넣으면 헤더, URL, 환경 변수에 넣을 수 있는 한 줄짜리 Base64를 받습니다. 입력한 그대로의 바이트를 인코딩하므로, 결과를 재현할 수 있어야 한다면 먼저 압축(minify)하세요.

무료 가입 없음, 제한 없음 로컬 업로드 없음 업데이트 2026. 10. 27.
입력 0 B출력 0 B크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

JSON을 Base64로 인코딩하는 방법

  1. 입력 · 텍스트에 JSON을 붙여넣거나, 예시를 눌러 예시 객체를 불러오세요.
  2. 출력 · Base64에서 Base64를 복사하세요. 크기 수치로 얼마나 길어졌는지 알 수 있습니다.
  3. URL, 쿠키, 토큰 같은 값이라면 URL-safe (- _) 와 패딩 없음 (=) 을 선택하세요.
  4. 다운로드는 결과를 base64.txt로 저장합니다.

이 페이지의 예시 {"id":42,"name":"base64hub","tags":["json","encode"],"active":true}는 67바이트이며 eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJlbmNvZGUiXSwiYWN0aXZlIjp0cnVlfQ==로 인코딩됩니다. 결과를 확인하려면 바꾸기를 누르거나, 보기 좋게 정렬까지 해 주는 Base64를 JSON으로를 사용하세요.

공백과 서식이 Base64를 바꿉니다

Base64는 JSON 텍스트의 문자를 그대로 인코딩하므로, 의미가 같은 두 문서라도 공백 하나만 달라도 Base64가 달라집니다.

JSON 텍스트Base64
{"a":1}eyJhIjoxfQ==
{"a": 1}eyJhIjogMX0=
{ "a": 1 }eyAiYSI6IDEgfQ==
세 줄로 보기 좋게 정렬한 {"a":1}ewogICJhIjogMQp9

Base64를 비교하거나, 캐시하거나, 서명한다면 한 직렬화기와 고정된 설정으로 JSON을 만들고 그 문자열을 그대로 인코딩하세요. 키 순서도 함정입니다. 대부분의 직렬화기는 삽입 순서를 유지하므로 {"a":1,"b":2}와 {"b":2,"a":1}은 다르게 인코딩됩니다.

기본 설정에서는 Python과 JavaScript가 다릅니다

객체 {"name": "Zoë", "n": 1}을 각 언어의 기본 설정으로 직렬화한 결과입니다.

직렬화기JSON 텍스트Base64
JavaScript JSON.stringify{"name":"Zoë","n":1}eyJuYW1lIjoiWm/DqyIsIm4iOjF9
Python json.dumps{"name": "Zoë", "n": 1}eyJuYW1lIjogIlpvXHUwMGViIiwgIm4iOiAxfQ==
separators=(",", ":"), ensure_ascii=False를 준 Python{"name":"Zoë","n":1}eyJuYW1lIjoiWm/DqyIsIm4iOjF9

URL-safe와 패딩 없음을 선택하면 JavaScript 버전은 eyJuYW1lIjoiWm_DqyIsIm4iOjF9가 됩니다.

Base64 JSON이 쓰이는 곳

  • HTTP 헤더. 추적 정보나 사용자 메타데이터 같은 컨텍스트를 담는 커스텀 헤더는 Base64 JSON을 담는 경우가 많습니다. JSON의 따옴표와 비 ASCII 문자는 헤더 값에 그대로 쓰기 안전하지 않기 때문입니다. 많은 서버가 약 8 KB보다 긴 헤더 줄을 거부하므로 페이로드는 작게 유지하세요.
  • URL 파라미터. OAuth state 값, 리디렉션 대상, 공유 링크에는 작은 JSON 객체가 Base64URL로 들어가기도 합니다.
  • 환경 변수와 시크릿. CI 시스템의 서비스 계정 키처럼 JSON 설정 전체를 이스케이프 없이 변수 하나에 담을 수 있습니다.
  • 토큰 형식. JWT의 헤더와 페이로드는 패딩 없이 Base64URL로 인코딩한 JSON입니다. 서명된 토큰을 만들려면 JWT 인코더를 사용하세요. 이 페이지는 인코딩만 합니다.

Base64는 크기를 3분의 1 늘리며, JSON 자체의 따옴표와 키가 값보다 큰 경우도 많습니다. 먼저 압축하는 것이 언제 이득인지는 Base64 크기 오버헤드에서 보여 줍니다.

코드에서 JSON을 Base64로

const obj = { name: "Zoë", n: 1 };
const bytes = new TextEncoder().encode(JSON.stringify(obj));
btoa(String.fromCharCode(...bytes));                     // "eyJuYW1lIjoiWm/DqyIsIm4iOjF9"
Buffer.from(JSON.stringify(obj)).toString("base64url"); // "eyJuYW1lIjoiWm_DqyIsIm4iOjF9" (Node.js)

TextEncoder 단계가 없으면 btoa(JSON.stringify(obj))는 ë를 Latin-1 1바이트로 인코딩하는데(eyJuYW1lIjoiWm/rIiwibiI6MX0=), UTF-8 디코더는 이를 읽지 못합니다. 또한 한글이나 이모지처럼 Latin-1 밖의 문자에서는 예외를 던집니다.

import base64, json

obj = {"name": "Zoë", "n": 1}
text = json.dumps(obj, separators=(",", ":"), ensure_ascii=False)
base64.b64encode(text.encode("utf-8")).decode()   # 'eyJuYW1lIjoiWm/DqyIsIm4iOjF9'

더 많은 옵션은 JavaScript, Node.js, Python 페이지에 있습니다.

자주 묻는 질문

JSON을 Base64로 바꾸려면 어떻게 하나요?

JSON을 문자열로 직렬화하고, 그 문자열을 UTF-8로 인코딩한 뒤 바이트를 Base64로 인코딩합니다. 위에 JSON을 붙여넣으면 결과가 나오고, JavaScript에서는 UTF-8 단계를 거친 btoa를, Python에서는 base64.b64encode(json.dumps(obj).encode())를 쓰세요.

같은 객체인데 Python과 JavaScript에서 Base64가 다른 이유는 무엇인가요?

직렬화기가 다르기 때문입니다. Python의 json.dumps는 :와 , 뒤에 공백을 넣고 비 ASCII 문자를 \u00eb처럼 이스케이프하지만, JSON.stringify는 둘 다 하지 않습니다. 맞추려면 separators=(",", ":")와 ensure_ascii=False를 쓰세요.

이 도구가 JSON을 검증하거나 압축하나요?

아닙니다. 공백을 포함해 입력한 텍스트를 그대로 인코딩합니다. 출력이 짧아야 하거나 다른 시스템의 결과와 바이트 단위로 같아야 한다면 먼저 JSON을 압축하세요.

URL에 넣을 JSON에는 URL-safe Base64를 써야 하나요?

네. 표준 Base64에는 URL에서 특별한 의미가 있는 +, /, =가 들어갈 수 있습니다. URL-safe와 패딩 없음을 선택하세요. JWT가 쓰는 것과 같은 형식입니다.