如何为JSON Schema添加基于属性数量的条件约束?
解决JSON Schema中Steps对象的条件必填约束问题
要实现你需要的三个约束,核心是用JSON Schema的if/then条件关键字处理“非空时必须包含键‘0’”的逻辑,以下是完整的Schema实现:
{ "type": "object", "properties": { "Steps": { "type": "object", // 约束2:键只能是0-99的数字 "patternProperties": { "^[0-9]{1,2}$": { // 这里填入你对每个Step值的具体约束,比如"type": "string"或"type": "number"等 } }, // 禁止0-99以外的键 "additionalProperties": false, // 约束3的核心逻辑:当Steps非空时,必须包含"0"键 "if": { "minProperties": 1 }, "then": { "required": ["0"] } } } }
关键逻辑说明
patternProperties通过正则^[0-9]{1,2}$确保所有键都是0到99的数字,满足约束2;additionalProperties: false防止出现超出0-99范围的非法键;if/then组合实现条件判断:当Steps的属性数量大于0(minProperties:1)时,触发then块的规则,强制要求包含"0"键;当Steps是空对象时,if条件不生效,required约束不会触发,满足约束1。
注意:这个写法依赖JSON Schema draft-07及以上版本,若使用更早版本需升级Schema版本支持。
内容的提问来源于stack exchange,提问作者Girish Tharwani
相关产品推荐
相关产品推荐

