oneOf
внутри properties
приводит к ожидаемому свойству с таким именем. Но поскольку вам не нужно свойство oneOf
, вам придется переместить его на тот же уровень, что и properties
. При этом, как правило, лучше объявить все свойства в одном месте. А затем опишите только дополнительные правила, которые ожидаются, когда.
Одна возможность - объявить все разрешенные свойства, а затем использовать dependencies
, чтобы гарантировать, что альтернативные свойства не могут присутствовать одновременно.
"compiler": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"gnu": {
"$ref": "#/definitions/compiler"
},
"intel": {
"$ref": "#/definitions/compiler"
}
},
"dependencies": {
"gnu": {
"not“: { "required": ["intel"] }
},
"intel": {
"not“: { "required": ["gnu"] }
}
}
}
Если требуются свойства gnu
/ intel
, вы также можете использовать oneOf
, например, так:
"compiler": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"gnu": {
"$ref": "#/definitions/compiler"
},
"intel": {
"$ref": "#/definitions/compiler"
}
},
"oneOf": [
{
"required": ["gnu"]
},
{
"required": ["intel"]
}
]
}