跳到正文

格式化JSON

把一整行JSON变成可读的格式,或者再压缩回去。大数字保留每一位,而大多数在线格式化工具会悄悄弄错这一点。不存储任何内容。

  • 绝不存储
  • 无需排队,无需等待
  • 无需注册,无水印
缩进
格式化结果

格式化后的JSON会显示在这里。

使用方法

1

粘贴JSON

或者拖入.json文件。您粘贴的任何内容都只留在本页面中——不存储任何内容。

2

选择缩进

两个空格、四个空格、制表符,或压缩成一行。您的选择会被记住,下次沿用。

3

复制或下载

复制结果,或保存为文件。如果JSON有错误,您会看到出错的行、列和字符。

来回转换之后,哪些能原样保留

格式化就是一次解析加一次重新输出,而数字是唯一按您输入的原文保留的部分。这比横幅所统计的大整数情况范围更广:任何JavaScript最短写法与您的写法不同的数字,都会按源文本重新输出,所以1.10保留末尾的零,1e5保持指数形式,负零仍然是负零。警告中只统计不安全的整数,因为只有它们的另一种结果是悄无声息的数据损坏,而不仅仅是写法被整理了一下。

字符串不会按原文保留。转义序列在读取文档时被解码,在输出时重新生成,所以\u0041会变成A,转义的正斜杠会变成不带转义的。值完全相同,字节却不同——这只在一种情况下有影响,但在那种情况下影响很大:如果下游有程序逐字节比较两个JSON文件,那么把其中一个经过格式化工具处理,就不是一个无操作。

在信任重新格式化的结果之前,有两个对象层面的行为值得了解。重复的键会被悄悄处理,以最后一个为准,与浏览器自身的解析器完全一致——一个带有两个“id”字段的文档会毫无报错地完成格式化,返回时只剩一个,也不会有任何提示告诉您另一个曾经存在。此外,只有非整数的键才会保持文件中的顺序:一个包含“1”、“2”和“name”的对象,返回时数字键会排在前面,并按数值排序,因为JavaScript本身就是这样排列对象属性的。普通的键则保持您书写的顺序。

如果您需要的是别的

如果您手上的是tsconfig.json、ESLint配置或VS Code设置文件,本页面会指出其中的注释和尾随逗号,而不会绕过它们进行格式化——对JSON工具来说这是正确的做法,但对您的文件来说这就是用错了工具。这些文件是JSONC,您的编辑器本来就能解析;在命令行中,json5和dasel都能读取它们,而不会假装它们是JSON。

如果需求不止是重新缩进,格式化工具就不是合适的工具。jq用一个表达式就能完成粘贴框根本无法控制的事:jq -S .会对每个对象的键排序,方便比较两个响应;jq 'del(.token)'能在您把数据给别人看之前删掉某个字段;jq -c能把一个对象数组压缩成管道所需的JSON Lines。它还能直接读取文件而不是剪贴板——一旦文档大到无法轻松全选,这就是关键区别。

常见问题

我的JSON会被存储吗?

不会。没有服务器调用,没有日志记录,不存储任何内容。页面加载完成后,您甚至可以断开网络,它照样能用。这一点在这里比看上去更重要:人们粘贴到在线格式化工具里的,往往是API响应、配置文件和错误信息,而这些内容经常包含令牌、客户记录和内部主机名。

为什么这里能保持大数字精确,而其他格式化工具不能?

因为几乎所有其他工具都会悄悄把它们弄坏。JavaScript的数字是64位浮点数,只能精确表示不超过9,007,199,254,740,991的整数。任何更大的数——Twitter/X的帖子ID、Discord的雪花ID、银行账号、64位数据库主键——一经过`JSON.parse`,末尾几位就丢了。数字看起来依然合理,这正是它危险的地方:7205759403792793600会悄悄变成7205759403792793000。本页面会原样保留您粘贴的每一位数字,并告诉您它保护了多少个数字。

遇到有错误的文件会怎样?

它会告诉您问题在哪里,而不只是告诉您有问题。您会看到行号、列号、出错的那一行(出错字符下方有^标记),以及一段通俗易懂的说明——比如“}前面有多余的尾随逗号”,而不是“Unexpected token”。尾随逗号、单引号、不带引号的键,以及字符串里未转义的换行,是导致JSON出错的四大原因,每一种都会被明确指出。

支持JSON Lines / NDJSON吗?

支持,而且会保持原有结构。JSON Lines是每行一个完整的JSON值——日志和数据导出常用这种格式——如果把它美化成多行,就会破坏它最有用的特性。本工具会自动识别,逐行分别格式化,并保留每行一个值的布局。

能修复带注释或尾随逗号的JSON吗?

它会精确指出它们的位置,但不会悄悄接受。注释和尾随逗号不属于JSON——它们属于JSON5或JSONC,也就是tsconfig.json这类配置文件实际使用的格式。如果格式化工具悄悄接受了它们,交给您的文件随后会被您的解析器拒绝,这比在这里看到报错更糟。

有大小限制吗?

取决于可用内存,而不是我们设定的上限。几MB的文档瞬间就能格式化完成;非常大的文档受限于一次能容纳多少数据,而不是我们这边的任何限制。

压缩会改变我的数据吗?

不会。压缩只删除标记之间的空白——绝不会调整键的顺序,绝不会改变数字格式,绝不会丢掉任何内容。结果解析出来的值完全相同,只是体积更小。

小贴士: 格式化是精确的——文档会被解析后重新输出,所以凡是能解析的内容都会原样输出。只支持严格的JSON:注释、尾随逗号和不带引号的键会被拒绝,而不是被悄悄修复,因为修复就意味着猜测。格式化非常大的文档时,内存中会同时保存两份。

把这个工具放到您的网站上

博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。