如何格式化、校验和压缩 JSON
- 把 JSON 粘贴到上方的文本框中。输入时会自动校验,状态栏会变成绿色或红色。
- 点击格式,按 2 个空格、4 个空格或制表符缩进美化输出;点击压缩,删除所有不必要的空格和换行。勾选键名按 A→Z 排序可以让对象的键按顺序排列。
- 复制结果,或下载为
data.json。想先看看效果,可以点击示例载入一小段样例。
JSON 有效时,状态栏会概括内容,例如JSON 有效 · 包含 7 个键的对象 · 221 个字符。这个字符数是示例数据按 2 个空格格式化后的长度;同样的数据压缩后是 159 个字符,按 4 个空格则是 259 个字符。格式化和压缩只改变值与值之间的空白,数据本身不会变。
修正错误
JSON 无效时,状态栏会显示解析器的错误信息以及出错的行号和列号。点击格式或压缩,输入框中的光标也会跳到那个位置。错误信息的措辞由浏览器生成,Chrome、Firefox 和 Safari 各不相同。常见原因如下:
| 错误 | 示例 | 修改方法 |
|---|---|---|
| 末尾多余的逗号 | {"a":1,} | 删除最后一项后面的逗号 |
| 单引号 | {'name': 'Alice'} | 键和字符串都改用双引号 |
| 键名没有引号 | {name: "Alice"} | 每个键都写成 "name" 这样的形式 |
| 注释 | {"a": 1 /* note */} | 删除注释,标准 JSON 不支持注释 |
| 缺少逗号 | {"a": 1 "b": 2} | 在各项之间加逗号 |
| 括号未闭合 | [1, 2, 3 | 补上 ] 或 } |
| 前导零 | {"a": 007} | 写成 7,或改用字符串 "007" |
| JSON 不支持的值 | NaN、undefined、True、None | 改用 null、true 或 false |
| 字符串中的真实换行 | 跨两行输入的字符串 | 把换行写成 \n |
| 多个文档 | {"a":1} 下一行又是 {"a":2} | 用逗号分隔并放进 [ ] 中 |
看到 True 或 None,多半是直接打印出来、没有用 json.dumps() 转换的 Python 字典。最后一行是许多日志文件使用的 JSON Lines 格式,每一行都是一个独立的文档。
什么样的 JSON 才算有效
JSON 由 RFC 8259 和 ECMA-404 标准定义。一个 JSON 文本就是一个值:用 { } 包裹的对象、用 [ ] 包裹的数组、用双引号包裹的字符串、数字,或者 true、false、null 之一。所以单独一个 42 或 "hello" 也是有效的 JSON。本校验器严格遵循标准,JSON5 或某些编辑器配置文件使用的“带注释的 JSON”等宽松格式都会报错。
格式化时可能发生的变化
本工具会先把 JSON 读成 JavaScript 的值,再重新输出,因此有几处细节会被规范化:
- 数字会改写成最简形式:
1.0变成1,1.50变成1.5,1e3变成1000。大于 9,007,199,254,740,991 的整数会丢失精度,12345678901234567890会变成12345678901234567000;像1e400这样大到无法表示的数会变成null。 - 转义会被简化:
"café"变成"café","中文"变成"中文",\/变成/。制表符等控制字符仍保持转义。 - 重复的键会合并成一个,保留最后的值:
{"a":1,"b":2,"a":3}变成{"a":3,"b":2}。 - 看起来像整数的键会按数字大小移到最前面:
{"b":1,"2":"two","a":3,"10":"ten"}变成{"2":"two","10":"ten","b":1,"a":3}。这是 JavaScript 决定对象属性顺序的方式造成的。
除了大数字和重复键这两种情况,这些变化都不会改变数据的含义:标准规定对象成员本身没有顺序,而数字或字符串的两种写法表示的是同一个值。如果你的 ID 有这么大,请把它存成字符串。
键名排序
键名按 A→Z 排序会对所有层级中每个对象的键进行排序。数组的元素顺序本身有意义,所以不会被重新排列。键按字符编码比较,大写字母排在下划线前面,二者又都排在小写字母前面:Zip、_id、age、name。键排好序后,用文本对比比较两个 API 响应或配置文件会容易得多。
常见问题
我的 JSON 会被发送到服务器吗?
不会。JSON 由浏览器直接解析和格式化,粘贴在这里的 API 响应、令牌和客户数据都不会离开你的电脑。
能自动修复有问题的 JSON 吗?
不能。凭猜测修改可能会在不知不觉中改变数据,所以工具只指出问题所在,修改交由你自己完成。
会按 Schema 校验数据吗?
不会。它只检查文本是否符合 JSON 语法,不检查是否包含特定的键或数据类型。
有哪些配合使用的工具?
想把 JSON 转成便于在电子表格中处理的表格,可以用 CSV ⇄ JSON 转换器;想读取登录令牌中的 JSON,可以用 JWT 解码器;遇到 Base64 编码的数据,可以用 Base64 编码/解码。