JSON Schema
JSON Schema 是一套用 JSON 本身书写的「规则文件」,用来描述另一份 JSON 数据应该长什么样:包含哪些字段、每个字段是什么类型、哪些必填、取值范围或格式限制等。它解决的不是「这段文本是不是合法 JSON」(那属于语法校验),而是「这段已经合法的 JSON,其结构和内容是否符合约定」。
它的核心是一组关键字,常见的有:
type:约束类型,如"string"、"number"、"object"、"array";properties:为对象里的各个字段定义子 Schema;required:一个字符串数组,列出必填字段名(写在对象级别,而非逐字段标记);enum、minimum/maximum、pattern(正则)等做进一步限制。
典型用途包括校验 API 的请求/响应、约束配置文件、自动生成表单与文档。使用时要留意版本差异:JSON Schema 有多个 draft(如 draft-07、2020-12),不同版本关键字和写法略有不同,应通过 $schema 声明所用版本,并确认校验库支持它。另一个常见误区是以为「未声明的字段会被自动拒绝」——其实默认是允许额外字段的,需要显式写 additionalProperties: false 才会禁止。
常见问题
JSON Schema 和 JSON 有什么区别?
JSON 是数据格式本身;JSON Schema 是用来描述并校验某一类 JSON 数据结构的规则,而它自己也是一份 JSON 文档。
它能判断「这是不是合法的 JSON」吗?
不能,那是语法校验(能否被解析)。JSON Schema 默认数据已经是合法 JSON,只负责检查字段、类型、取值等是否符合约定。
为什么我写了 required,却没拦住多余的字段?
required 只保证「必填字段都存在」,不限制额外字段。要禁止未声明的字段,需要额外设置 additionalProperties: false。