RevealTheme logo

JSON格式化与校验工具

格式化、美化、校验并压缩JSON。完全在你的浏览器中运行,因此你的数据永远不会离开你的设备。

如何使用本工具

  1. 1

    将你的JSON粘贴到输入框中。

  2. 2

    点击“格式化”以带缩进、易读的方式显示,或点击“压缩”以移除空白。

  3. 3

    错误会指出解析失败的确切行和列。

  4. 4

    将结果复制到剪贴板。

什么是JSON,为什么格式化很重要?

JSON(JavaScript Object Notation)是现代Web API、配置文件和结构化事件日志的通用语言。每个REST和GraphQL API都返回JSON;每个package.json、tsconfig.json以及大多数CI配置都是JSON;AWS、GCP和Azure在它们的CLI中都使用JSON交流。JSON的强项在于其极简的语法:六个结构字符({}、[]、逗号、冒号、引号)、四种基本类型(字符串、数字、布尔值和null)以及递归嵌套。这种极简同时也是它的不便之处:JSON不支持注释、尾随逗号、无引号的键,也不支持多行字符串。一个放错位置的引号或逗号就会破坏整个文档。本工具会按照RFC 8259(JSON规范)校验输入,然后以一致的缩进呈现以便阅读,或移除所有空白以便通过网络传输。解析和格式化完全在你的浏览器中运行,使用的是JavaScript引擎原生的JSON.parse和JSON.stringify函数,与运行在Node.js服务器和所有浏览器中的代码完全相同。这意味着你的数据永远不会经过网络传输,而这里的校验行为也与你的生产环境代码所见完全一致。

常见使用场景

  • 通过将API响应粘贴到格式化工具中来调试它们:立即看清被压缩的JSON所隐藏的结构。

  • 在将JSON发送给严格的消费方(AWS CloudFormation、Kubernetes清单等)之前进行校验。

  • 美化结构化日志库(Pino、Bunyan)输出的单行JSON日志。

  • 在将配置文件嵌入HTML或环境变量之前对其进行压缩(需要解析的字节更少)。

  • 在从base64解码后格式化JSON Web Token的负载。

  • 通过格式化两个API响应并观察它们的差异来进行对比。

常见问题

我的JSON会离开浏览器吗?
不会。所有解析和格式化都通过内置的JSON.parse和JSON.stringify函数在你的浏览器中完成。数据永远不会到达服务器,也不会出现在日志中。用它来处理包含令牌、客户数据或其他机密的API响应是安全的。
我能格式化JSON5或JSONC(带注释的)吗?
不能:本工具遵循严格的JSON规范(RFC 8259)。注释和尾随逗号是语法错误,会产生解析器的错误信息。对于宽松的JSON变体,请使用JSON5解析器(如json5.org),或先让你的输入通过一个移除注释的预处理器。
我应该使用多大的缩进?
2个空格是JavaScript和Web的惯例,也最为通用。4个空格是Python生态系统的默认值(与PEP 8的缩进一致)。制表符在不同编辑器中的呈现并不一致,且会破坏对比工具;除非你的团队有严格的制表符约定,否则请避免使用。这个选择纯属审美;解析器并不在意。
为什么压缩后的JSON很重要?
压缩后的JSON可节省字节,这在大规模场景下意义重大(例如,一个返回100KB数据、面对数百万次请求的公开API)。对于小型配置文件(仅几KB),差异可以忽略不计。浏览器对格式化和压缩后的JSON的解析时间是相同的,因此压缩的唯一理由就是带宽。
我该如何解读错误信息?
JavaScript的JSON.parse错误信息包含解析失败的位置(从开头算起的偏移量)。常见错误:“Unexpected token”通常表示缺少引号或逗号,或存在未转义的特殊字符。“Unexpected end of JSON input”意味着文档被截断。“Unexpected non-whitespace character”往往表示存在尾随逗号。
我能格式化非常大的JSON文件吗?
浏览器的JSON.parse在性能变得棘手之前,可处理最大约100MB的文件。对于更大的文件,请在命令行中使用jq:它可以流式处理任意大小的JSON文件。
JSON和JavaScript对象字面量有什么区别?
JSON是JavaScript对象字面量语法的一个严格子集。区别在于:JSON的键必须是用双引号括起来的字符串(JS允许无引号的键和单引号);JSON禁止注释、尾随逗号和undefined;JSON没有表达式、函数调用或计算值。JavaScript可以安全地求值JSON;JSON无法求值任意的JavaScript。

相关工具