如何使用JSON Schema验证数组中至少3个满足x.foo='bar'的对象?
使用JSON Schema验证数组中满足条件的项数量
当然有标准方法实现这个需求,JSON Schema 2019-09及后续版本引入的contains和minContains关键字组合,就是专门用来处理这类“数组中至少N个项满足特定条件”的验证场景。
实现示例
针对你的需求,对应的JSON Schema如下:
{ "type": "object", "properties": { "array": { "type": "array", // 定义单个项需要满足的条件:foo属性值为'bar' "contains": { "type": "object", "properties": { "foo": { "const": "bar" } }, "required": ["foo"] }, // 要求至少有3个项满足上述contains定义的条件 "minContains": 3 } }, "required": ["array"] }
关键说明
contains:指定数组中单个项必须满足的结构和值约束,这里要求项是包含foo属性且值严格等于bar的对象。minContains:设置满足contains条件的项的最小数量,这里设为3,正好匹配你的需求。required: ["foo"]:确保每个被检查的项都存在foo属性,避免无foo属性的项被误判(如果允许数组项缺失foo属性,可移除这一行,此时这类项不会被计入满足条件的数量)。
验证效果
你提供的示例对象会通过验证,因为数组中恰好有3个符合foo: 'bar'的项;如果数组中符合条件的项少于3个,验证会直接失败。
旧版本兼容说明
如果需要兼容JSON Schema Draft-7及更早版本(这些版本没有minContains),没有完美的标准方法——用allOf叠加多个contains的方式会存在同一元素被重复计数的问题,无法准确验证“至少3个不同项满足条件”。因此优先推荐使用支持2019-09及以后版本的JSON Schema验证工具。
内容的提问来源于stack exchange,提问作者delpo
相关产品推荐
相关产品推荐

