如何将 Base64 解码为 JSON
- 把 Base64 粘贴到 输入 · Base64。页面加载时带有一个示例,可以直接替换。
- 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 和 webhook 会在另一个 JSON 文档中以 Base64 字符串传递结构化元数据、分页游标或事件载荷。如果你手上有外层文档,解码 JSON 中的 Base64 可以一次性找出并解码所有这类字段。
- Kubernetes 的
.dockerconfigjsonSecret 以一个 JSON 文档的 Base64 存储容器镜像仓库凭据,而该文档本身又包含 Base64 编码的auth值;Docker config JSON 解码器 可以解开这两层。 - 环境变量和 CI 密钥经常把 JSON 配置写成一行 Base64,以避免引号问题。
URL 安全的输入(- 和 _,无填充)会被自动接受,所以令牌片段可以原样解码。
JSON 无法格式化时
格式化需要有效的 JSON。解析失败时,解码后的文本会原样显示,通常足以看出问题:
- 数据被截断,文本在某个值的中间结束了。请确认你复制了完整的 Base64 字符串;如果混进了换行或引号,修复 Base64 可以帮忙。
- 文本不完全是 JSON。单引号、末尾多余的逗号(
{"a":1,}就是eyJhIjoxLH0=)和注释在手写的配置中很常见,但在 JSON 中都是无效的。 - 字符集不对。按定义(RFC 8259),JSON 使用 UTF-8,所以如果带重音的字符显示不对,说明生成方用了别的编码;试试 字符集。
- 载荷被压缩过。如果输出无法阅读,而 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 中,要先解码成字节再经过 TextDecoder,因为 JSON.parse(atob(s)) 会把所有非 ASCII 字符弄成乱码:
const s = "eyJuYW1lIjoiYmFzZTY0aHViIn0=";
const json = new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
JSON.parse(json).name; // "base64hub"
URL 安全变体的写法见 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 解码器。