上传文件
  1. base64hub
  2. 文本工具
  3. JSON 转 Base64

JSON 转 Base64:编码 JSON 载荷

粘贴 JSON,得到一行可以放进请求头、URL 或环境变量的 Base64。字节严格按输入编码,如果结果必须可复现,请先压缩 JSON。

免费 无需注册,不限次数 本地 不上传任何内容 更新于 2026年10月27日
输入 0 B输出 0 B大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把 JSON 编码为 Base64

  1. 把 JSON 粘贴到 输入 · 文本,或按 示例 载入一个示例对象。
  2. 从 输出 · Base64 复制 Base64。大小数字会显示它变长了多少。
  3. 用于 URL、Cookie 或类似令牌的值时,勾选 URL 安全(- _) 和 不填充(=)。
  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\u00eb", "n": 1}eyJuYW1lIjogIlpvXHUwMGViIiwgIm4iOiAxfQ==
Python,使用 separators=(",", ":")、ensure_ascii=False{"name":"Zoë","n":1}eyJuYW1lIjoiWm/DqyIsIm4iOjF9

勾选 URL 安全和不填充后,JavaScript 版本会变成 eyJuYW1lIjoiWm_DqyIsIm4iOjF9。

Base64 JSON 的使用场景

  • HTTP 请求头。 携带上下文的自定义请求头(例如链路追踪或用户元数据)经常存放 Base64 JSON,因为原始 JSON 中的引号和非 ASCII 字符放在请求头值中并不安全。很多服务器会拒绝超过约 8 KB 的请求头行,所以这类载荷要尽量小。
  • URL 参数。 OAuth 的 state 值、重定向目标和分享链接有时会以 Base64URL 携带一个小 JSON 对象。
  • 环境变量和密钥。 整个 JSON 配置无需转义就能放进一个变量,例如 CI 系统中的服务账号密钥。
  • 令牌格式。 JWT 的头部和载荷是不带填充、经 Base64URL 编码的 JSON。要生成签名的令牌,请使用 JWT 编码器;本页只负责编码。

Base64 会让体积增加三分之一,而 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 字节(eyJuYW1lIjoiWm/rIiwibiI6MX0=),UTF-8 解码器无法读取;遇到 Emoji 等超出 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 安全的 Base64 吗?

应该。标准 Base64 可能包含 +、/ 和 =,它们在 URL 中有特殊含义。请勾选 URL 安全和不填充,这与 JWT 使用的格式相同。