JSON Schema如何校验非必填属性的拼写错误
JSON Schema非必填属性名拼写错误校验方法
要捕获非必填属性的拼写错误,核心是限制JSON对象只能使用Schema中已经声明过的属性,具体实现方案如下:
基础方案:直接拦截未声明属性
在Schema的对象定义中添加additionalProperties: false字段即可,该字段的作用是禁止出现properties列表中没有声明的属性,不管属性是否为必填项,只要未在Schema中定义就会触发校验错误。
修改后的完整示例Schema如下:
{ "$id": "https://example.com/person.schema.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Person", "type": "object", "properties": { "firstName": { "type": "string", "description": "The person's first name." }, "lastName": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years which must be equal to or greater than zero.", "type": "integer", "minimum": 0 } }, "additionalProperties": false }
用上述Schema校验你给出的测试JSON时,会直接返回不允许存在额外属性"aged"类的报错,直接定位拼写错误。
注意:如果你的Schema中使用了
patternProperties匹配动态属性名,将additionalProperties替换为unevaluatedProperties: false即可实现相同效果。
进阶方案:允许额外属性+拼写错误提示
如果业务场景需要允许未声明的额外属性存在,依然要提示可能的拼写错误,可以借助主流JSON Schema校验库(如Ajv)的扩展能力:在校验逻辑中添加相似度匹配规则,将未声明的属性名和已声明的属性名做匹配(常用莱文斯坦距离计算相似度),相似度高于阈值时就输出拼写错误提示,比如检测到aged和已定义的age相似度很高,就会提示你输入的"aged"可能是拼写错误,是否为"age"?。
内容的提问来源于stack exchange,提问作者satish
相关产品推荐
相关产品推荐

