JSON 格式化

在线格式化、美化、校验和压缩 JSON,并显示语法错误所在的行和列。免费且私密:所有处理都在你的浏览器中完成。

如何格式化、校验和压缩 JSON

  1. 把 JSON 粘贴到上方的文本框中。输入时会自动校验,状态栏会变成绿色或红色。
  2. 点击格式,按 2 个空格、4 个空格或制表符缩进美化输出;点击压缩,删除所有不必要的空格和换行。勾选键名按 A→Z 排序可以让对象的键按顺序排列。
  3. 复制结果,或下载为 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 编码/解码。