功能说明
在每次按键时检查一份 JSON 文档,并精确定位它在哪里断了。一个徽章在你输入时于 Valid JSON 和 Invalid JSON 之间切换。文档合法时,一个四格面板报告它的大小(UTF-8 字节)、顶层类型、键或元素数量,以及最大嵌套深度。不合法时,错误会指出行和列,第二个面板会引用你输入中出错的那一行。所有操作都在你的浏览器中本地运行;你粘贴的任何内容都不会被发送到别处。
使用方法
- 把 JSON 粘贴或输入到 JSON 输入框。点击 Sample 载入一份演示文档,Clear 清空输入框。
- 读取徽章:Valid JSON(绿色)或 Invalid JSON(红色)。
- 合法时,读取统计面板:
- bytes - 文档的 UTF-8 大小,不是字符数。
- type - array、object、string、number、boolean、null 之一。
- keys(对象)或 items(数组)- 仅统计顶层。
- depth - 最大嵌套深度;顶层计为 1。
- 不合法时,读取
Line X, Column Y: <原因>,以及下方被引用的那一行。 - 复制输入复制你的文本;复制分享链接把它编码进 URL(
?j=...)。
示例
{"name":"CosmoDev","free":true,"tools":["json","base64"]}
结果:Valid JSON,57 bytes,type object,3 keys,depth 3。tools 里的字符串位于根之下两层,因此深度是 3。
一个标量就是一份完整的 JSON 文档:
| 输入 | 判定 | 统计 |
|---|---|---|
123 |
Valid JSON | 3 bytes,type number,depth 1 |
true |
Valid JSON | 4 bytes,type boolean,depth 1 |
null |
Valid JSON | 4 bytes,type null,depth 1 |
一个被钉在位置上的错误:
{"a": 1}
extra
结果:Line 2, Column 1 加上原因,下方面板引用 extra。
JSON 校验的原理
JSON 解析器从左到右把文档读一遍,停在第一个不能合法出现在该位置的字符上。工具随后把这个字符的偏移量映射为一个位置:数偏移量之前的换行符得到行,数距最后一个换行符以来的字符得到列。两者都从 1 开始,所以 Line 2, Column 1 表示第二行的最开头。引用面板打印你输入中的那一行,因此摘录永远来自你的文档,而不是通用模板。
实践中,四种错误造成了大多数非法 JSON:
| 错误 | 示例 | 失败原因 |
|---|---|---|
| 尾逗号 | {"a":1,} |
逗号之后解析器期待一个键,而 } 不是 |
| 单引号 | {'a':1} |
字符串和键必须使用双引号 |
| 未加引号的键 | {a:1} |
键是字符串,而字符串要加引号 |
| 注释 | {"a":1} //x |
JSON 根本没有定义注释 |
这些都不是风格问题。JSON 语法(RFC 8259)对每一项只允许一种写法,解析器强制执行它。这种严格性正是意义所在:一份在这里通过校验的文档,在每个合规解析器、每种语言中都会以相同方式解析。
补充说明
- 仅第一个错误: 解析器在第一个问题上停止。修好它,重新校验,下一个问题就会浮现。
- 引擎差异: 当底层引擎没有报告位置时,判定仍然会显示原始消息。
- 可分享: 你的输入被编码进 URL(
?j=...),因此一个链接就能重现精确的视图。 - 私密: 可以安全处理配置、凭据和 API 载荷。
- 相关工具: JSON Formatter、JSON Minify、JSON ↔ CSV Converter。