你是一个正确的轨道
oneOf
anyOf
. 几乎每次你想的时候
其中之一
,你真的想
. 记住
properties
模式和其他模式一样。你可以像在其他地方一样使用布尔关键字。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"field1": {
"title": "field1"
"anyOf": [
{
"type": "string",
"pattern": "[A-Z]"
},
{
"type": "integer",
"minimum": 5,
"maximum": 10
}
]
},
"required": {
"type": "string",
"title": "required",
"readonly": true
},
"decisive": {
"type": "string",
"title": "Decisive",
"enum": ["yes", "no", "maybe", "not now"]
}
}
}
}
编辑1
其中之一
{
"type": "object",
"properties": {
"anyOf": [
{
"field1": { ... }
},
{
"field1": { ... }
}
],
"required": { ... },
"decisive": { ... }
}
}
因为它出现在评论中,这里有一个更好的解释为什么
其中之一
其中之一
将始终代替
. 如果
如果不存在,JSON模式就不会失去任何表达能力。
是一种更精确的工具。使用
其中之一
任何
任何
是布尔或运算。
是布尔“异或”(XOR)运算“异或”没有什么用处,以至于现代语言甚至都不支持它。或通常用运算符表示
||
. 异或没有模拟。
方法
任何
其中的项可以是真的。
方法
只有一个
其中之一
全部的
以确保一个模式验证为true,其余模式验证为false。当你使用
,验证程序可以在找到验证为true的模式后立即停止。这被称为“短路”,所有现代编程语言在计算或执行操作时都会这样做。当模式是互斥的(它们几乎总是互斥的)时,在找到一个模式之后继续验证模式纯粹是浪费,因此应该避免。
我想
其中之一
因为从自然语言的角度来看,它听起来是正确的。