tigtools

JSON 验证器

粘贴 JSON,根据 JSON 标准检查其语法。错误会通过标记精确指出,并附有通俗易懂的说明。

在浏览器中运行 无需注册

粘贴 JSON 后,结果会立即显示在这里。

使用方法

  1. 将 JSON 粘贴到输入框、打开文件,或点击“试用示例”查看错误报告。
  2. 查看结果:有效的 JSON 会显示绿色提示;如果有错误,则会显示首个错误及其行号、列号,并在问题下方标出位置。
  3. 根据提示修复错误并重新检查;输入内容时,结果会自动更新。
  4. 对于有效的 JSON,可以查看统计信息:根值类型、键的数量、嵌套深度和字节大小。

工作原理

验证器使用浏览器自带的 JSON 解析器,根据 JSON 标准(RFC 8259 / ECMA-404)检查语法。因此,通过此处检查的文档也能被 JavaScript 的 JSON.parse 和其他语言中符合标准的解析器接受。如果解析失败,专为此工具编写的严格检查器会遍历文本一次,找出第一个错误及其准确的行列位置,然后显示出错行,并在问题位置下方标出 ^。

提示聚焦于手动编写 JSON 或从 JavaScript 复制内容时常见的错误:最后一项后多了逗号、字符串使用单引号、键未加引号、包含 // 或 /* */ 注释、使用 NaN、Infinity 或 undefined 等值、字符串中有原始换行,以及连续粘贴了两个 JSON 文档(如 JSON Lines 文件)。工具只报告第一个错误,因为一个错误往往会影响其后的内容。

此工具只检查语法,不会根据 JSON Schema 验证内容,因此无法判断是否缺少必填字段。它也不会提示重复键:标准允许重复键,而且大多数解析器会保留最后一个值。统计信息会计算所有层级对象中的键数量;扁平对象或数组的深度为 1,每嵌套一层,深度增加 1。

示例

从 JavaScript 复制的配置

{name: 'demo', debug: true,} 会在第 1 行第 2 列报错:“对象键必须用双引号括起”。给键加上引号后,再次检查会定位到单引号字符串,随后定位到末尾多出的逗号。

每行包含一个对象的日志文件

粘贴 {"id":1} 和 {"id":2} 这样的两行内容时,会在第 2 行报告“JSON 值结束后还有多余内容”。每一行单独看都是有效的 JSON(JSON Lines),但要将它们放在一起,需要用 [ ] 括起来,并用逗号分隔。

检查 API 载荷

一个 2 MB 的响应很快就能通过验证,并显示根类型:Array、1,500 个顶层项和 4 层嵌套深度,可在据此编写代码前快速检查数据是否符合预期。

常见问题

此工具会根据 JSON Schema 进行验证吗?

不可以。它会检查文本是否是格式正确的 JSON。检查必填字段、类型或格式需要使用 JSON Schema 验证器,本工具不包含此功能。

为什么只显示一个错误?

出现第一个语法错误后,解析器无法判断作者原本的意图,因此后续的“错误”往往是第一个错误引起的连带问题。修复报告中的问题后,如果还有其他错误,会立即显示。

注释或末尾逗号有时也有效吗?

在 JSON 中不允许。JSON5 和 JSONC 等格式(部分编辑器的设置文件会使用)允许注释,但标准 JSON 解析器会拒绝它们,因此这里会将其报告为错误。

像 42 或 "hello" 这样的单个值是有效的 JSON 吗?

可以。自 RFC 7159 起,任何 JSON 值都可以作为根值,不仅限于对象和数组。不过,部分较旧的工具和 API 仍要求顶层必须是对象或数组。

为什么显示的列数可能与编辑器中的不同?

列数按 UTF-16 代码单元计算,与 JavaScript 计算字符串长度的方式相同。Emoji 和某些不常见字符按两个代码单元计算,制表符则按一列计算,但编辑器显示时可能会占用更宽的空间。

隐私

验证完全在浏览器中进行。您粘贴或打开的 JSON 不会上传、存储,也不会纳入分析统计。