JSON Schema propertyNames验证失效求助(Ionic+AJV环境)
解决JSON Schema额外属性验证失效的问题
核心问题
你遇到的additionalProperties: false不生效,本质是Schema层级错误,或是被anyOf/oneOf这类关键字的逻辑覆盖了。结合你的场景,大概率是把additionalProperties放在了错误的层级,导致它没作用到你要限制的目标对象上。
正确的Schema写法
要限制对象仅允许header、footer、color、typeface这几个属性,必须让additionalProperties: false和properties处于同一层级,示例如下:
{ "type": "object", "properties": { "header": { "type": "object" }, "footer": { "type": "object" }, "color": { "type": "object" }, "typeface": { "type": "object" } }, "additionalProperties": false }
常见错误排查
- 层级错误:如果
additionalProperties写在properties内部的子字段下,它只会限制该子字段的额外属性,不会作用于父对象。 - anyOf/oneOf冲突:如果Schema中使用了
anyOf或oneOf,要么在每个分支里都添加additionalProperties: false,要么将该配置提升到包含anyOf的顶层对象层级。 - AJV配置问题:检查AJV实例是否启用了
strict: false这类放宽验证的配置,或是安装了忽略额外属性的插件。
验证测试
用包含额外属性的对象测试:
{ "header": {}, "footer": {}, "jiii": {}, "juuu": {} }
此时验证应返回false,符合预期。
内容的提问来源于stack exchange,提问作者ChrisK
相关产品推荐
相关产品推荐

