如何编写JSON Schema:数组不可同时包含"none"与其他指定选项
修正后的JSON Schema实现
你当前的Schema仅限制了数组单个元素的可选范围,但未约束数组不能同时包含none与a/b/c。要实现需求,需要将oneOf逻辑移到数组层级,定义两种互斥的合法情况:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "selection": { "type": "array", "minItems": 1, "oneOf": [ // 情况1:数组仅包含"none"(允许重复) { "items": { "const": "none" } }, // 情况2:数组仅包含"a"/"b"/"c",且不含"none" { "items": { "enum": ["a", "b", "c"] }, "not": { "contains": { "const": "none" } } } ] } }, "required": ["selection"] }
逻辑说明:
oneOf强制数组只能符合以下两种情况之一:- 所有元素都是
none,从根源避免混入其他值; - 所有元素属于
a/b/c,同时通过not + contains明确禁止数组中出现none;
- 所有元素都是
minItems: 1保证数组不为空(若业务允许空数组,可直接移除该约束)。
验证效果:
- 有效示例
["a", "b", "c"]会匹配第二个分支; - 有效示例
["none"]会匹配第一个分支; - 无效示例
["a", "b", "none"]不匹配任何分支,验证直接失败。
内容的提问来源于stack exchange,提问作者Jmonkey
相关产品推荐
相关产品推荐

