U.UtilityApp
🔄 格式转换免费 · 无需注册

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 的整数会被四舍五入:

{"id": 1798453214567890123} → "id": 1798453214567890200

输出看起来完全合法,所以很容易被忽略。19 位的雪花 ID、16 位以上的订单号和数据库主键最常中招。这类字段如果要保持精确,接口应该以字符串形式传输。不要把格式化后的结果当作这些字段的准确值复制回系统里。

键的顺序,以及一次只能放一个 JSON

键一般保持原来的顺序,只有一个例外:看起来像整数的键会按从小到大挪到最前面。

{"b":1,"10":"x","2":"y","a":2} → "2", "10", "b", "a"

数据本身没变,因为 JSON 对象本来就不保证顺序,但和原文件做对比时会看到行被挪动了。拿两个版本的文件格式化后比较时要注意这一点。

任何单个 JSON 值都可以格式化,包括单独的字符串或数字,比如 42。但两个值前后相连就不行,所以 JSON Lines 文件和每行一个对象的日志会报错,需要一行一行地格式化。反过来要去掉空白、压成一行,请用 JSON 压缩工具。

常见问题

JSON 里的 \u4e2d\u6587 怎么变回中文?+

把整段 JSON 粘贴进来即可。格式化时 \u 转义会被解析,输出里直接显示汉字,例如 \u4e2d\u6587 显示为“中文”。

能改成 4 个空格或 Tab 缩进吗?+

不能,缩进固定为每层两个空格。如果项目用的是别的风格,大多数代码编辑器都可以对结果重新缩进。

格式化会改变我的数据吗?+

值的含义不变,但有两个例外要留意:特别大的整数会被四舍五入,重复的键只保留最后一个。其他变化都只是排版或写法上的。

在线解析 JSON 会把数据上传吗?+

不会。解析和格式化都在你的浏览器里完成,接口返回的数据和带密钥的配置文件都不会离开你的设备。