JSON 格式化与验证
格式化、美化并验证 JSON,自动缩进对齐,即时显示错误提示。粘贴压缩的 JSON,获得清晰可读的输出。
JSON 格式化之后,除了缩进还会变什么
这个 JSON 格式化工具会先把整个文档解析到内存里,再用两个空格缩进重新输出。因为是重建文档,而不是只调整缩进,有几处细节会变:
- \u 转义的中文会还原成汉字。很多接口返回的中文是
\u5f20\u4e09这样的形式,格式化后直接显示为“张三”。\/也会变成普通的 /。引号、反斜杠和控制字符仍保留转义。 - 数字改写成最短形式。
1.50变成 1.5,1e3变成 1000,1.0E-7变成 1e-7,-0变成 0。 - 重复的键会被悄悄合并。
{"a":1,"a":2}输出后只剩"a": 2,不会提示第一个值被丢掉了。
中文输入法造成的报错
手写或从聊天记录里复制的 JSON,最常见的问题是混进了全角符号。JSON 只认半角的冒号、逗号和双引号,下面几种都会报“无效的 JSON”:
| 输入 | 问题 |
|---|---|
{"name":"张三"} | 全角冒号 |
{"name":"张三","age":30} | 全角逗号 |
{“name”:"张三"} | 中文引号 |
{'name':'张三'} | 单引号 |
{"a":1,} | 最后多了一个逗号 |
“无效的 JSON:”后面的具体说明来自浏览器自带的解析器,不同浏览器写法不同。Chrome、Edge 等浏览器会给出位置,比如第一行的全角冒号会提示 line 1 column 8,顺着这个位置找通常就能发现问题。改的时候把输入法切到英文半角。
雪花 ID 这类长整数会丢精度
数字按标准的双精度浮点数读取,超过 9007199254740991 的整数会被四舍五入:
输出看起来完全合法,所以很容易被忽略。19 位的雪花 ID、16 位以上的订单号和数据库主键最常中招。这类字段如果要保持精确,接口应该以字符串形式传输。不要把格式化后的结果当作这些字段的准确值复制回系统里。
键的顺序,以及一次只能放一个 JSON
键一般保持原来的顺序,只有一个例外:看起来像整数的键会按从小到大挪到最前面。
数据本身没变,因为 JSON 对象本来就不保证顺序,但和原文件做对比时会看到行被挪动了。拿两个版本的文件格式化后比较时要注意这一点。
任何单个 JSON 值都可以格式化,包括单独的字符串或数字,比如 42。但两个值前后相连就不行,所以 JSON Lines 文件和每行一个对象的日志会报错,需要一行一行地格式化。反过来要去掉空白、压成一行,请用 JSON 压缩工具。
常见问题
JSON 里的 \u4e2d\u6587 怎么变回中文?+
把整段 JSON 粘贴进来即可。格式化时 \u 转义会被解析,输出里直接显示汉字,例如 \u4e2d\u6587 显示为“中文”。
能改成 4 个空格或 Tab 缩进吗?+
不能,缩进固定为每层两个空格。如果项目用的是别的风格,大多数代码编辑器都可以对结果重新缩进。
格式化会改变我的数据吗?+
值的含义不变,但有两个例外要留意:特别大的整数会被四舍五入,重复的键只保留最后一个。其他变化都只是排版或写法上的。
在线解析 JSON 会把数据上传吗?+
不会。解析和格式化都在你的浏览器里完成,接口返回的数据和带密钥的配置文件都不会离开你的设备。