假设我有一个允许像这样的对象的JSON模式:
...
"assetMetadata": {
"type": "object",
"additionalProperties": false,
"properties": { ... }
}
...
所以说我想改变它以允许同一个对象或该特定对象的数组。这里只接受一个数组:
...
"assetMetadata": {
"type": "array",
"description": "...",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {...}
}
...
属性是相同的(它是同一个对象,只是多个而不是一个的选项)。
有趣的是,在我正在进行的项目中,unmarshaller已经可以处理两者(它将单个对象转换为大小为1的序列),因此纯粹的验证阻止了我前进。我们希望保持与现有API的可比性,这就是我现在不能只需要一个数组的原因。
答案 0 :(得分:3)
您可以使用anyOf
关键字和definitions
/ $ref
来实现此目的,以避免重复。
{
"type": "object",
"properties": {
"assetMetadata": {
"anyOf": [
{ "$ref": "#/definitions/assetMetaData" },
{
"type": "array",
"description": "...",
"items": { "#/definitions/assetMetaData" }
}
]
}
},
"definitions": {
"assetMetadata": {
"type": "object",
"additionalProperties": false,
"properties": { ... }
}
}
}