跳到正文

校验JSON

不只是告诉您有效或无效——还有出错的行、列、字符,以及如何修复。不存储任何内容;校验就在这里完成。

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

粘贴JSON,输入时即实时校验。

使用方法

1

粘贴JSON

或者拖入文件。文件就地读取,不会发送到任何地方。

2

查看结果

有效,并统计其中包含的内容;或者无效,并标出确切的出错位置。

3

修改后重新校验

直接在原处编辑,结果会随着您的输入实时更新。

JSON到底禁止什么

JSON的语法刻意设计得极小,几乎所有校验失败,都源于人们从JavaScript中借用、而JSON从未采纳的少数几种写法。最后一个元素后面的尾随逗号。用单引号代替双引号。不带引号的键。注释——JSON没有注释,从来都没有。NaN和Infinity,它们是合法的JavaScript数字,却不是合法的JSON。还有开头的字节顺序标记(BOM),它在任何编辑器里都看不见,一些Windows工具在保存为UTF-8时会加上它,结果让一个完全正常的文档在第一个字符就解析失败。

有两种写法是合法的,却仍然会给您带来麻烦,这就是为什么“有效”不等于“正确”。规范并不禁止重复的键——而每个解析器的处理方式都不同,多数取最后一个,所以带有重复键的文档在这里能通过校验,在不同的语言中却有不同的含义。另外,JSON中的数字没有规定精度上限,而大多数解析器会把它们读成浮点数:超过约九千万亿的整数会被悄悄四舍五入,这就是为什么大的标识符经常以字符串形式传递。

您得到的是解析停止处的确切行、列和字符,这通常比错误信息本身更有用。解析器报告的是文档开始变得说不通的位置,而不是犯错的位置——缺少右花括号会在文件末尾报错,缺少逗号会在它后面的那个标记处报错。养成查看报错位置前面一点的习惯,最能节省时间。

格式正确并不等于内容正确,这个区别很重要。本工具确认的是语法能够解析。文档是否包含您的API要求的字段、某个值是否在范围内、某个日期是否真的是日期——这些都不是JSON层面的问题。那是Schema校验,需要一份Schema;一个文档可能在这里毫无瑕疵,却立刻被您要发送的服务拒绝。

如果您需要的是别的

如果要按Schema而不是语法来检查文档,JSON Schema是标准,ajv是其最快的实现——它会告诉您缺少了某个必填字段或某个值超出了范围,这通常才是您真正想问的问题。check-jsonschema可以在命令行和CI中运行同样的检查。

在命令行中,jq是必备工具:jq empty file.json会进行校验,成功时不输出任何内容,非常适合脚本使用;jq .则用于格式化。对于大到无法全部载入内存的文件,jq --stream和Python的ijson可以增量解析,这是任何需要载入整个文档的网页都做不到的。

常见问题

我的JSON会被存储吗?

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

JSON有错误时,它会告诉我什么?

出错的行、列、那一行的内容(确切的出错字符下方有^标记),以及那里本应出现什么。大多数JSON出错都是四个原因之一——尾随逗号、用单引号代替双引号、键没有引号,或者字符串里有真正的换行——每一种都会被明确指出,而不是笼统地描述为语法错误。

什么样的才算有效?

严格遵循RFC 8259。也就是说:键必须用双引号,不能有尾随逗号,不能有注释,数字不能有前导零或十六进制写法。严格正是校验工具的意义所在:如果它接受了您的解析器会拒绝的内容,那它就等于什么都没告诉您。

它会按Schema校验我的JSON吗?

不会——本工具检查的是语法,那是另一个问题。语法关心的是这段文本到底是不是JSON;Schema关心的是数据的字段和类型是否正确。本页面回答的是前一个问题:它会告诉您文件能够解析,并展示它找到的结构,但它并不知道您的字段应该是什么样子。

为什么这里显示有效,我的API却仍然拒绝?

因为有效的JSON和您的API想要的JSON是两回事。一个语法完美的文档,仍然可能缺少必填字段、在该用数字的地方用了字符串,或者嵌套方式与接口的要求不同。对照API文档查看本页面显示的结构摘要——不匹配之处通常一眼就能看出来。

大数字能被正确检查吗?

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

有大小限制吗?

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

小贴士: 本工具检查的是JSON格式是否正确,而不是内容是否有意义。一个文档可能完全有效,却仍然缺少您的API需要的字段——那是Schema校验,需要一份Schema。在这里您能得到的是解析停止处的确切行、列和字符。

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

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