JSON Schema数组验证失效问题求助
问题分析与解决方案
我帮你定位到了两个核心配置错误,这就是你的JSON Schema没能正确验证数组内容的原因:
关键错误解析
additionalProperties: false位置错误
你把这个限制额外属性的规则写在了meta属性的定义块里,这意味着它是用来约束meta字段的(但meta是字符串类型,根本不需要这个配置),而非约束数组里的元素对象。这就导致测试JSON里的author、ip等未定义字段完全不受限制。required: ["hash"]位置错误
你把必填字段的要求放在了数组层级上,而不是数组元素的对象层级。数组本身不存在hash属性,所以这个规则等于无效,测试JSON里的元素没有hash也能通过验证。
修正后的JSON Schema
{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "http://json-schema.org/draft-07/schema#", "title": "JSON Validator", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "properties": { "hash": { "type": "string" }, "date": { "type": "string" }, "uuid": { "type": "string" }, "task": { "type": "object", "properties": { "name": { "type": "string" }, "order": { "type": "integer" }, "step": { "type": "integer" } }, "additionalProperties": false // 可选:如果需要限制task对象的额外属性可添加 }, "meta": { "type": "string" } }, "required": ["hash"], // 移至数组元素对象层级,要求每个元素必须包含hash字段 "additionalProperties": false // 移至此处,限制数组元素对象不能有未定义属性 } } }
验证效果
用修正后的Schema验证你的测试JSON时,会触发两个符合预期的错误:
- 每个数组元素都缺少必填的
hash字段 - 数组元素包含了未定义的额外属性(如
author、ip、message等)
这样就完全实现了你想要的严格验证逻辑。
内容的提问来源于stack exchange,提问作者CastleDweller
相关产品推荐
相关产品推荐

