我要问自己的是,我是否可以级联多个“ oneOf”,或者有更好的方法来使我的案例有效。
将ObjectA或ObjectB的定义用作单个对象或它们的数组
仅使用ObjectA的定义
{
"X": "test"
}
仅使用ObjectB的定义
{
"Y": "test"
}
在数组中使用ObjectA或ObjectB的定义
[
{
"X": "test"
},
{
"Y": "test"
}
]
在数组中两次使用ObjectA的定义
[
{
"X": "test"
},
{
"X": "test"
}
]
我尝试使用这种模式,MonacoEditor的IntelliSense运行良好,但是我仍然收到错误/警告:“当只有一个必须验证时才匹配多个模式。”
{
"definitions": {
"objectA": {
"type": "object",
"properties": {
"X": {
type: "string"
}
}
},
"objectB": {
"type": "object",
"properties": {
"Y": {
type: "string"
}
}
}
},
"oneOf":
[
{
"oneOf":
[
{
"$ref": "#definitions/objectA"
},
{
"$ref": "#definitions/objectB"
}
]
},
{
"type": "array",
"items":
{
"oneOf":
[
{
"$ref": "#definitions/objectA"
},
{
"$ref": "#definitions/objectB"
}
]
}
}
]
}
“当只有一个必须验证时才匹配多个模式。”
答案 0 :(得分:2)
问题是您不需要objectA中的X属性和objectB中的Y属性,因此,一个空对象(即{)可以同时验证这两个对象。
此外,如果希望具有objectA和objectY的数组有效,则需要使用anyOf代替oneOf。
{
"definitions": {
"objectA": {
"type": "object",
"properties": {
"X": {
"type": "string"
}
},
"required": ["X"]
},
"objectB": {
"type": "object",
"properties": {
"Y": {
"type": "string"
}
},
"required": ["Y"]
}
},
"oneOf":
[
{"$ref": "#/definitions/objectA"},
{"$ref": "#/definitions/objectB"},
{
"type": "array",
"minItems": 1,
"items":
{
"anyOf":
[
{"$ref": "#/definitions/objectA"},
{"$ref": "#/definitions/objectB"}
]
}
}
]
}
如果您不想验证空数组,则添加了minItems。