JSON 校验与检查工具

按标准检查 JSON,一次列出所有问题,每个都附带精确位置和通俗解释。缺少括号时,校验器还会告诉你它最可能应该放在哪里。

输入
输出

    数据不会离开你的浏览器。快捷键:Ctrl/⌘ + Enter 执行主操作。

    什么是 JSON 校验器?

    JSON 校验器用来检查一段文本是否是符合 RFC 8259 定义的合法 JSON:整体是一个值,由对象、数组、双引号字符串、数字、true、false 和 null 组成,逗号和冒号位置正确,所有括号都已闭合。各种校验器的区别在于:答案是“否”的时候,它们能告诉你什么。本工具一次列出所有问题,给出每个问题的行号和列号,用通俗的话解释原因,并提供修复后的版本。

    如何校验 JSON

    1. 粘贴 JSON或打开文件。输入时会自动校验;“校验”按钮只是重新检查一遍并滚动到结果处。
    2. 查看状态栏。绿色表示合法,并显示行数、大小、键的数量和嵌套深度;红色表示不合法,并显示问题数量。
    3. 点击某个问题,光标会跳到对应的行和列。出错的行以红色高亮,警告以黄色高亮。
    4. 修复问题:可以手动修改,也可以点击“修复 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}
    // commentJSON 不允许注释删除注释

    找出缺失的括号

    括号不配对是最难用肉眼找到的 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 里面。

    不影响合法性的警告

    JSON 合法后,可以直接使用 JSON 格式化工具、压缩工具或 JSON 对比。

    JSON 校验器常见问题

    如何找出 JSON 中缺失的括号?

    把 JSON 粘贴到这里。如果某个对象或数组没有闭合,校验器会指出它是在哪一行开始的。对于有缩进的 JSON,它还会更进一步:在该对象内部找到第一个与起始行缩进相同的行,那里通常就是本该出现右括号的位置,并提示“最可能的原因……请在第 N 行末尾补上”。“修复 JSON”会在该处插入括号。

    为什么 JSON 看起来没问题,在 JavaScript 里却解析失败?

    常见的隐形元凶有:最后一项后面的尾随逗号、从文字处理软件或聊天应用粘贴来的弯引号、从网页复制来的不间断空格(U+00A0),以及文件开头的字节顺序标记(BOM)。校验器会逐一明确指出这些问题,而不是笼统地报 "Unexpected token"。

    校验器接受注释或尾随逗号吗?

    不接受,因为标准 JSON(RFC 8259)不允许。它们会被报告为错误,让你知道严格的解析器会拒绝这个文件。如果你编辑的是 JSONC(VS Code 设置)或 JSON5,这些格式是允许的;“修复 JSON”按钮可以把这类文件转换为严格的 JSON。

    重复的键算错误吗?

    JSON 标准规定键应当唯一,但并未禁止重复,大多数解析器会默默保留最后一个值。这使得重复键成为常见的 bug 来源,所以校验器会把它们显示为警告并给出首次出现的行号,同时仍判定文档合法。

    “修复 JSON”会改动哪些内容?

    它会删除尾随逗号、多余逗号和注释,补上缺失的逗号和冒号,转换单引号和弯引号,给未加引号的键和文本加上引号,把 True/False/None 改为小写,规范 .5、007 这样的数字,并根据缩进判断位置来闭合括号。请务必检查输出:推测的括号位置或未加引号的单词未必符合你的本意。

    能否按 JSON Schema 校验?

    暂时不能。本页面检查的是语法,即文本是否为格式正确的 JSON。Schema 校验(必填字段、类型、格式)是另一个步骤,需要把 Schema 作为第二个输入。