我正在编写一些JSON模式,其中包含一些具有共享属性的对象 .
在JSON模式1中:
...
"properties": {
"someProperty": {
"type": "object",
"required": [
"propertyA",
"propertyB",
"propertyC",
],
"additionalProperties": false,
"properties": {
"propertyA": {
"type": "integer"
},
"propertyB": {
"type": "integer"
},
"propertyC": {
"type": "integer"
}
}
}
}
...
在JSON模式2中:
...
"properties": {
"someProperty": {
"type": "object",
"required": [
"propertyD",
"propertyB",
"propertyC",
],
"additionalProperties": false,
"properties": {
"propertyD": {
"type": "integer"
},
"propertyB": {
"type": "integer"
},
"propertyC": {
"type": "integer"
}
}
}
}
...
因此,这两个对象( someProperty
)之间的唯一区别是 propertyA
与 propertyD
.
因此,我决定创建一个通用的JSON模式,其中包含这两个共享属性 propertyB
和 propertyC
的定义 .
一种解决方案是在公共模式中定义一个包含这两个属性的对象,但是我希望我的JSON在同一级别上具有这三个属性(flat,unwrap),并且 not 如下所示:
"someProperty": {
"propertyA": 2,
"sharedObject": {
"propertyB": 3,
"propertyC": 4
}
}
我想要的是什么?我想最终得到一些能使我的JSON有效的东西:
"someProperty": {
"propertyA": 2,
"propertyB": 3,
"propertyC": 4
}
和:
"someProperty": {
"propertyD": 2,
"propertyB": 3,
"propertyC": 4
}
所有这些属性都为 required
且不允许 additionalProperties
.
1 回答
您可以使用
oneOf
实现此目的 .oneOf
是一个独家OR声明 . "propertyA"或"propertyD"中的一个或另一个可以同时出现 .