Skip to content
JSON Schema Validator
Tools

JSON Schema Validator

Validate JSON against a JSON Schema (draft-07 / draft-2020-12) with clear error messages.

JSON Data Paste your data here
JSON Schema Draft-07 supported

Runs entirely in your browser. Nothing is uploaded.

什么是 JSON Schema,为什么它很重要?

JSON(JavaScript 对象表示法)是 Web API、配置文件和数据交换的通用语言。但原始 JSON 没有内置的类型系统——一个字段今天可能是字符串,明天可能是数字,发现不匹配的唯一方法是运行时崩溃或隐蔽的数据错误。JSON Schema 填补了这一空白:它是一种声明式词汇,用于描述 JSON 文档的预期结构和约束,在运行时对实际数据进行验证。

团队使用 JSON Schema 在处理之前验证 API 请求载荷,强制执行启动时加载的配置文件的结构,从单一事实来源自动生成文档和 UI 表单,以及维护微服务之间的契约一致性。OpenAPI——REST API 文档的标准——直接建立在 JSON Schema 之上,使其成为 Web 上部署最广泛的数据验证标准。

JSON Schema 草案版本:Draft-07、Draft 2019-09 和 Draft 2020-12

JSON Schema 经历了多个规范草案。Draft-07(2018 年发布)在所有主流验证器库中仍然是支持最广泛的版本,也是 OpenAPI 3.0 使用的方言。它引入了强大的 if/then/else 条件验证关键字、readOnly/writeOnly 属性注释以及内容编码关键字。如果你今天正在编写 schema 且不需要最新功能,Draft-07 是获得最大生态系统兼容性的最安全选择。

Draft 2020-12 是当前的稳定规范,引入了几个重要变化:items 关键字被 prefixItems 取代用于元组验证,动态引用使用 $dynamicRef 而非 $recursiveRef,新的 unevaluatedProperties 和 unevaluatedItems 关键字提供了对额外内容更精确的控制。

JSON Schema 核心关键字详解

type 关键字强制执行数据类型:string、number、integer、boolean、array、object 或 null。required 列出对象中必须存在的属性。properties 将每个属性名映射到其自己的子 schema。pattern 将正则表达式应用于字符串值。minimummaximumminLengthmaxLength 约束数字和字符串范围。enum 将值限制为一组固定的允许值;const 将其限制为单个值。

组合关键字让你从简单的构建块构建复杂的规则:allOf 相当于逻辑 AND,anyOf 相当于 OR,oneOf 相当于 XOR。not 关键字反转一个 schema。if/then/else 关键字启用条件验证。它们合在一起让你无需编写自定义命令式代码就能表达几乎任何验证规则。

生产环境中的 JSON Schema:API 契约和 CI 流水线

在生产系统中,JSON Schema 验证在服务器端或 CI 流水线中运行,使用 Ajv(JavaScript/Node.js)、jsonschema(Python)或 Newtonsoft.Json(C#)等库。Schema 与应用代码一起提交到版本控制,以便像其他变更一样审查和跟踪契约变更。破坏性变更——删除必填字段、缩小类型——在代码审查时被发现,防止到达生产环境并破坏消费者。

这个基于浏览器的工具非常适合在提交之前迭代设计和调试 schema。粘贴你的数据,编写你的 schema,点击验证,阅读详细的错误信息,然后优化——无需服务器,无需 npm install,无需往返。验证器还会在每次验证运行时美化打印你的 JSON,使其成为便捷的 JSON 格式化工具和 schema 测试器的组合。

实际示例:验证 API 响应

假设你的 API 返回一个用户对象。验证它的 JSON Schema 可能需要一个整数 id、一个非空字符串 name、一个匹配电子邮件模式的字符串 email,以及一个来自 'admin'、'editor' 和 'viewer' 枚举的可选字符串 role。将 additionalProperties 设置为 false 确保你的 API 永远不会静默返回下游消费者可能无意中依赖的未记录字段。

if/then/else 功能支持条件规则——例如,如果 role 是 'admin' 则需要 permissions 数组,否则禁止。这些组合规则让单个 schema 覆盖对象的多个有效形状,无需重复属性定义。在将 schema 嵌入代码库之前在这里编写和测试它,可以显著节省生产环境的调试时间。

UtiloKit 与其他 JSON Schema 验证器的比较

大多数在线 JSON Schema 验证工具分为两类:可视化 schema 构建器和服务器端 API 验证器。jsonschema.net 强迫你通过点击式 UI 构建 schema——对于学习 schema 结构的初学者很有帮助,但对于已经知道需要哪些关键字并想要快速测试他们编写的 schema 的开发者来说太慢了。

jsonschemavalidator.net 基于 Microsoft 的 Newtonsoft.Json 库,使用对 JavaScript 开发者来说不熟悉的 .NET 属性路径和错误码报告错误。StoplightSwaggerHub 等工具将 schema 验证作为完整 OpenAPI 文档的一部分,需要项目设置和账户。

UtiloKit 的验证器运行在与大多数 Node.js、Express 和 Fastify 应用相同的 Ajv 引擎上。错误信息、JSON 指针路径和关键字行为与你的生产环境完全匹配——它在你的浏览器中免费运行,无需账户、无需上传、无文件大小限制、无每日使用上限。

Frequently asked questions

什么是 JSON Schema?

JSON Schema 是一种用于注释和验证 JSON 文档的声明式词汇。它定义了 JSON 文档必须满足的预期结构、数据类型和约束。团队使用它来验证 API 载荷、强制配置文件结构、自动生成文档和 UI 表单,以及确保微服务之间的数据一致性。OpenAPI 3.0 和 3.1 都建立在 JSON Schema 之上。

这个验证器支持哪个 JSON Schema 草案版本?

这个验证器实现了 JSON Schema Draft-07 的核心关键字,这是所有主要验证器库中支持最广泛的版本,包括 Ajv(JavaScript)、jsonschema(Python)和 Newtonsoft.Json(C#)。Draft-07 引入了 if/then/else 条件验证、readOnly/writeOnly 注释和内容编码关键字。

allOf、anyOf 和 oneOf 有什么区别?

allOf 要求数据对每个列出的子 schema 都有效——它就像逻辑 AND。anyOf 要求对至少一个子 schema 有效——逻辑 OR。oneOf 要求对恰好一个子 schema 有效——逻辑 XOR。这些组合关键字让你从简单的可复用部分构建复杂的验证规则。

additionalProperties: false 有什么作用?

它禁止对象中任何未在 properties 关键字下明确列出的属性。这创建了一个封闭的 schema——对于严格的 API 契约非常有用,其中意外字段应导致验证失败。这是最常见的陷阱之一:如果你在不更新 schema 的情况下向数据添加新属性,验证将失败,直到正确设置 additionalProperties。

我可以验证对象数组吗?

可以。将 type 设置为 'array' 并提供 items 子 schema。数组中的每个元素都将根据该子 schema 进行验证。对于元组验证,在 Draft-07 中将 items 设置为 schema 数组。你还可以使用 minItems、maxItems 约束数组长度,并使用 uniqueItems: true 强制唯一性。

如何使用 $ref 引用子 schema?

在顶级 $defs 对象中定义可复用的 schema,然后用 '$ref': '#/$defs/SchemaName' 引用它们。这保持你的 schema DRY 且可读。这个验证器只支持本地(同文档)$ref——指向外部文件的远程 $ref URL 不会被获取。

最常见的 JSON Schema 验证错误有哪些?

最常见的错误是:缺少必填属性(required 中列出的字段在数据中不存在)、类型不匹配、pattern 违规、范围违规以及当 additionalProperties 为 false 时出现额外属性错误。这个验证器会报告每个错误以及指向失败数据的精确 JSON 指针路径。

Related tools

查看全部工具