如何确保数组中只有一项在 JSON 模式中具有特定值
How to ensure that no more than one item in an array has a particular value in JSON schema
给定一个像这样的 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 个项目,这些项目是一个名为“selected”的 属性 对象,其值为 true
。
{
...
"contains": {
"type": "object",
"properties": {
"selected": { "const": true }
},
"required": ["selected"]
},
"minContains": 0,
"maxContains": 1
}
请注意,minContains
和 maxContains
是 2019-09 草案中的新内容。在此之前,没有很好的方法来限制 contains
可以匹配的项目数。在 https://json-schema.hyperjump.io
试试
给定一个像这样的 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 个项目,这些项目是一个名为“selected”的 属性 对象,其值为 true
。
{
...
"contains": {
"type": "object",
"properties": {
"selected": { "const": true }
},
"required": ["selected"]
},
"minContains": 0,
"maxContains": 1
}
请注意,minContains
和 maxContains
是 2019-09 草案中的新内容。在此之前,没有很好的方法来限制 contains
可以匹配的项目数。在 https://json-schema.hyperjump.io