JSON 格式化与校验
粘贴 JSON 即可格式化、校验或压缩,错误会报告到具体的行和列。
这个 JSON 工具能做什么
把任意 JSON 文本粘贴进来,工具可以按统一缩进美化输出、压缩成单行,或者仅仅检查它是否合法。当输入不是合法 JSON 时,校验器会指出解析失败的精确行号和列号,并显示附近的字符片段,你可以在几秒钟内修好一个漏掉的逗号或没加引号的键名,而不必在一大段文本里逐字查找。
所有处理都在你的浏览器里、由 JavaScript 引擎自带的 JSON 解析器完成。你粘贴的文本不会发送到任何服务器,所以拿它处理 API 响应、配置文件、日志,或者任何包含令牌、凭据、个人信息的数据都是安全的。
使用方法
在输入框中粘贴或输入 JSON,格式化会随输入自动进行。缩进可选 2 空格、4 空格或 Tab;勾选「键名排序」会在每一层嵌套里按字母顺序排列对象的键,这样两份文档用 diff 工具对比时一目了然。需要最小体积(比如放进 HTTP 请求或环境变量)时点「压缩」去掉所有空白。「复制」把结果放到剪贴板,「下载」保存为 .json 文件。
状态栏显示字节数、对象键总数和最大嵌套深度,在把一份大文档发往别处之前,这是一个快速的合理性检查。
校验器能捕获的常见 JSON 错误
数组或对象最后一项后面的多余逗号在 JSON 中是不允许的,尽管多数编程语言能接受。字符串或键名用单引号是非法的:JSON 要求双引号。注释不属于 JSON 规范,// 或 /* */ 都会导致失败。没加引号的键(如 {name: "x"})是 JavaScript 对象字面量,不是 JSON。NaN、Infinity、undefined 这些特殊值在 JSON 里不存在。以上每一种错误都会给出清晰的提示和可以直接跳转的位置。
背景:JSON 从哪里来
JSON(JavaScript Object Notation)由 Douglas Crockford 在 2000 年代初提出,作为 XML 的轻量替代,语法直接借用 JavaScript 已有的对象字面量。它在 2006 年被标准化为 RFC 4627,之后是 ECMA-404 和 RFC 8259(2017),后者是现行定义:六种值类型(对象、数组、字符串、数字、true/false、null),交换编码为 UTF-8,不允许注释。它的兴起与浏览器端应用的兴起同步:一种浏览器能用 JSON.parse 原生解析的格式,胜过任何需要单独解析器的格式。
应用领域
几乎所有 Web API 都返回 JSON,所以拿到陌生响应的第一件事就是粘进格式化工具看它的结构。配置文件(package.json、tsconfig.json、VS Code 设置)、基础设施定义(CloudFormation、Terraform 状态)、NoSQL 数据库(MongoDB 文档、PostgreSQL 的 jsonb 列)、日志管道(ndjson 每行一个 JSON 对象)以及 JWT 令牌的负载,全都是 JSON;JSON 也常放在 URL 查询参数里传输,此时必须先做百分号编码。相关格式在它之上扩展:JSON5 与 JSONC 为配置文件加入注释和尾随逗号,JSON Schema 描述期望的结构,JSON Lines 在一个文件里流式存放多个文档——这些本校验器都会按严格 JSON 拒绝,这是有意为之。
常见问题
我的 JSON 会被上传吗?
不会。格式化完全在浏览器中运行。页面加载完成后你可以断开网络,工具照常工作。
格式化和压缩有什么区别?
格式化(美化)添加换行和缩进,让人能读懂结构;压缩去掉所有不必要的空白,让数据体积最小以便机器传输。两者产生的 JSON 在语义上完全相同。
为什么在 JavaScript 里能用的对象,工具却说不是合法 JSON?
JavaScript 对象字面量比 JSON 宽松得多。单引号、不带引号的键、尾随逗号和注释在 JavaScript 代码里都没问题,但 JSON 标准(RFC 8259)全部禁止。
有大小限制吗?
没有硬性限制。几 MB 的文档在现代设备上可以瞬间完成格式化,超大文件只受浏览器内存限制。
键名排序会改变数据的含义吗?
不会。按规范 JSON 对象是无序的,重新排列键得到的是等价文档。数组是有序的,其顺序始终保持不变。