我想知道我是否可以定义一个JSON模式(草案4),它至少需要一个对象的许多可能属性中的一个。我已经知道allOf
,anyOf
和oneOf
,但只是不知道如何以我想要的方式使用它们。
下面是一些JSON示例:
// Test Data 1 - Should pass
{
"email": "hello@example.com",
"name": "John Doe"
}
// Test Data 2 - Should pass
{
"id": 1,
"name": "Jane Doe"
}
// Test Data 3 - Should pass
{
"id": 1,
"email": "hello@example.com",
"name": "John Smith"
}
// Test Data 4 - Should fail, invalid email
{
"id": 1,
"email": "thisIsNotAnEmail",
"name": "John Smith"
}
// Test Data 5 - Should fail, missing one of required properties
{
"name": "John Doe"
}
我希望至少需要id
或email
(也接受两者),并且根据格式仍然通过验证。如果我提供两者(测试3),则使用oneOf
会导致验证失败,即使其中一个无效,anyOf
也会通过验证(测试4)
下面是我的模式:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "https://example.com",
"properties": {
"name": {
"type": "string"
}
},
"anyOf": [
{
"properties": {
"email": {
"type": "string",
"format": "email"
}
}
},
{
"properties": {
"id": {
"type": "integer"
}
}
}
]
}
您能帮助我如何为我的用例实现正确的验证吗?
2条答案
按热度按时间vmdwslir1#
要至少需要一组属性中的一个,请在一系列
anyOf
选项中使用required
:如果您需要的任何属性存在(
"id"
、"email"
),则它将传递allOf
中的相应选项。iyfjxgzm2#
您可以使用
minProperties: number
(如果需要,还可以使用maxProperties: number
),这样可以缩短模式定义:Link to documentation: https://json-schema.org/understanding-json-schema/reference/object.html#size