什么是 JSON 校验器?
JSON 校验器用来检查一段文本是否是符合 RFC 8259 定义的合法 JSON:整体是一个值,由对象、数组、双引号字符串、数字、true、false 和 null 组成,逗号和冒号位置正确,所有括号都已闭合。各种校验器的区别在于:答案是“否”的时候,它们能告诉你什么。本工具一次列出所有问题,给出每个问题的行号和列号,用通俗的话解释原因,并提供修复后的版本。
如何校验 JSON
- 粘贴 JSON或打开文件。输入时会自动校验;“校验”按钮只是重新检查一遍并滚动到结果处。
- 查看状态栏。绿色表示合法,并显示行数、大小、键的数量和嵌套深度;红色表示不合法,并显示问题数量。
- 点击某个问题,光标会跳到对应的行和列。出错的行以红色高亮,警告以黄色高亮。
- 修复问题:可以手动修改,也可以点击“修复 JSON”自动修复并显示格式化后的结果。
常见错误及提示方式
| 你写的内容 | 校验器的提示 | 合法的 JSON |
|---|---|---|
{"a": 1,} | "}" 前有尾随逗号 | {"a": 1} |
{"a": 1 "b": 2} | 第 1 行的值后面缺少逗号 | {"a": 1, "b": 2} |
{"a": [1, 2} | 缺少 "]",无法闭合第 1 行开始的数组 | {"a": [1, 2]} |
{'a': 'b'} | 字符串必须使用双引号 | {"a": "b"} |
{a: 1} | 属性名必须放在双引号中 | {"a": 1} |
{"n": 007, "x": .5} | 数字有前导零;数字以小数点开头 | {"n": 7, "x": 0.5} |
{"ok": True, "v": None} | 布尔值和 null 必须小写 | {"ok": true, "v": null} |
// comment | JSON 不允许注释 | 删除注释 |
找出缺失的括号
括号不配对是最难用肉眼找到的 JSON 错误,因为解析器发现问题的位置往往离出错的地方很远。看下面这个文件,env 对象丢了右花括号:
1 {
2 "name": "api",
3 "env": {
4 "LOG_LEVEL": "info",
5 "DB_POOL": 20
6 "ports": [8080]
7 }
一般的解析器会报第 6 行缺少逗号,或者报文件意外结束。本校验器会同时报告缺少的逗号和未闭合的对象,并把提示放在最前面:第 3 行开始的对象缺少右括号 "}"。请在第 5 行末尾、第 6 行之前补上。之所以能得出这个结论,是因为第 6 行的缩进和第 3 行完全相同,所以它不可能属于第 3 行开始的那个对象。“修复 JSON”会在那里插入括号,得到预期的结构:ports 位于顶层,而不是在 env 里面。
不影响合法性的警告
- 重复的键:语法上允许,但含义不明确;大多数解析器会保留最后一个值。
- 字节顺序标记(BOM):文件开头不可见的 U+FEFF。RFC 8259 规定不得添加,部分解析器会拒绝。
JSON 合法后,可以直接使用 JSON 格式化工具、压缩工具或 JSON 对比。