给定这样的JSON数组:
[
{
"description": "Foo",
"selected": false
},
{
"description": "Bar",
"selected": true
},
{
"description": "Baz",
"selected": false
}
]
使用以下模式进行验证:
{
"$schema": "http://json-schema.org/draft/2019-09/schema",
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1
},
"selected": {
"type": "boolean"
}
},
"required": [
"description",
"selected"
]
}
}
只有在不超过一个项的selected
属性设置为true
的情况下,才能修改架构以使数组通过验证?也就是说,零个或一个具有该值的对象将被视为有效,但两个或多个对象则无效。
您可以使用contains
/minContains
/maxContains
关键字来执行此操作。contains
表示数组中至少有一个项必须通过给定的架构。minContains
和maxContains
允许您指定contains
可以匹配的项目数的上限和下限。
下面的模式说,数组中必须有0到1个项目,这些项目是一个名为"的属性的对象;选择";其值为CCD_ 10。
{
...
"contains": {
"type": "object",
"properties": {
"selected": { "const": true }
},
"required": ["selected"]
},
"minContains": 0,
"maxContains": 1
}
注意,minContains
和maxContains
在草案2019-09中是新的。在此之前,没有好的方法来限制contains
可以匹配的项目数量。在尝试https://json-schema.hyperjump.io