JSON 在线校验与语法检查

粘贴 JSON 立刻判断是否合法,出错时定位到具体行列并说明原因,通过后给出键数量、层级与体积等结构统计。

接口联调、配置上线、数据导入,很多故障的起点只是一个不起眼的逗号。JSON 校验要回答的问题很简单:这段文本能不能被标准解析器接受,如果不能,错在哪里。这个工具在输入的同时完成校验,报错时给出行号、列号和该行内容,不必在几千行里逐行数括号、找引号。

本站的校验由浏览器内置的 JSON 解析器执行,与 Node.js、Chrome、Safari 使用同一套规则,结果和线上运行环境一致,不容易出现本地能跑、服务器报错的偏差。输入的文本只存在于当前页面内存中,不上传、不落盘,关闭标签页即消失,校验内部数据或含个人信息的报文时不必先脱敏。

合法 JSON 的边界在哪

标准 JSON 比 JavaScript 对象字面量严格得多。key 必须用双引号包裹,单引号和反引号都不接受;字符串只能用双引号;最后一个成员后面不能有逗号;注释无论 // 还是 /* */ 都不合法;undefined、NaN、Infinity 不是合法值,十六进制数字和以 0 开头的数字(如 012)也不允许;日期必须写成字符串形式。相对宽松的一点是顶层可以是任意值,一个数字、一个字符串甚至 null 都是合法的 JSON 文本。重复 key 不属于语法错误,解析器采用后出现的那个值。

错误位置是怎么算出来的

解析失败时,浏览器抛出的信息里带有一个字符偏移量,工具用它在原文中切分出行号与列号,再取该行去掉首尾空白的内容作为出错片段,一并显示在底部状态栏。需要留意两点:列号按字符计数,不做字节换算,同一行混排中文时与编辑器按视觉宽度显示的位置可能有偏差;解析器报出的位置是它发现问题的地方,不一定是错误开始的地方,比如少了一个闭合括号,报错点通常落在文件末尾。

校验通过后能读到什么

语法正确时,状态栏显示结构类型(对象、数组或基础值)、最大嵌套深度、Key 总数、字符数、行数与按 UTF-8 计算的字节大小。Key 总数是递归统计的,嵌套对象里的键同样计入,所以它反映的是文档整体规模而不是顶层字段个数。最大深度从顶层容器算起,逐层加一,可以用来判断结构是否嵌套过深。这些数字在排查「解析为什么慢」「字段是不是少了一层」这类问题时,比肉眼翻页可靠。

广告

常见问题

校验失败时状态栏的一键修复做了什么?
它会尝试把这段文本变成合法 JSON:删掉 // 与 /* */ 注释、去掉紧跟在 } 或 ] 前的尾随逗号、把单引号字符串改成双引号、给没有引号的 key 补上双引号、把 undefined 和 NaN 换成 null。只有修复成功才替换编辑器内容,仍然无法解析时会保留你的原文并提示手工检查。
JSON 里可以有注释吗?
标准 JSON 不允许注释,// 和 /* */ 都会导致解析失败。注释只在 JSON5、JSONC 这类扩展格式里合法,VS Code 的配置文件用的就是带注释的 JSONC。如果你拿到一份带注释的配置,可以先用智能纠错去掉注释,再回来校验。
为什么重复的 key 不被判定为错误?
JSON 语法只要求 key 是字符串,不检查是否重复,所以 {"a":1,"a":2} 是合法文本。但解析结果有歧义,标准建议后者覆盖前者,JavaScript 的 JSON.parse 正是这样处理,最终只保留 "a":2。要确认数据有没有踩这个坑,可以看树状视图或先做 Key 排序核对。
为什么报错的行号指向文件末尾?
常见于括号或引号没有闭合。解析器必须读到文本结束,才能确认某处缺少收尾符号,于是把位置报在最后一个字符之后。看到末尾报错但末尾看起来正常时,应该往前找第一个未闭合的 {、[ 或双引号,而不是去修改最后一行。

相关工具

广告