json-模式,对象数组,唯一键值
json-schema, array of object, unique key-value
我有以下架构
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"choices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"isCorrect": {
"type": "boolean"
}
},
"required": ["value", "isCorrect"],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 50,
"uniqueItems": true,
"additionalItems": false,
}
}
}
验证数据
{
"choices": [
{
"value": "John",
"isCorrect": true
},
{
"value": "Doe",
"isCorrect": true
}
]
}
但我希望 isCorrect
在对象数组中有一个 true
(其他 false
)。
是否可以验证单个密钥的唯一性?
您无法检查基于键的唯一性,但您可以结合使用 contains
和 maxContains
来获得您描述的约束。
在 properties.choices
对象中,添加以下...
"contains": {
"properties": {
"isCorrect": {
"const": true
}
}
},
"maxContains": 1,
您可以使用 https://json-schema.hyperjump.io
进行检查
contains
关键字确保数组包含至少一项根据子模式值有效。
maxContains
关键字,如果使用 contains
关键字,根据 contains
子模式值确保不超过有效项目数。
https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#section-6.4.4
我有以下架构
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"choices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"isCorrect": {
"type": "boolean"
}
},
"required": ["value", "isCorrect"],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 50,
"uniqueItems": true,
"additionalItems": false,
}
}
}
验证数据
{
"choices": [
{
"value": "John",
"isCorrect": true
},
{
"value": "Doe",
"isCorrect": true
}
]
}
但我希望 isCorrect
在对象数组中有一个 true
(其他 false
)。
是否可以验证单个密钥的唯一性?
您无法检查基于键的唯一性,但您可以结合使用 contains
和 maxContains
来获得您描述的约束。
在 properties.choices
对象中,添加以下...
"contains": {
"properties": {
"isCorrect": {
"const": true
}
}
},
"maxContains": 1,
您可以使用 https://json-schema.hyperjump.io
进行检查contains
关键字确保数组包含至少一项根据子模式值有效。
maxContains
关键字,如果使用 contains
关键字,根据 contains
子模式值确保不超过有效项目数。
https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#section-6.4.4