给定一个名为location
的模式的一部分,如下所示:
{
type: 'object',
required: [ 'country' ],
additionalProperties: false,
properties: {
country: {
enum: [ 'DE', 'CH', 'AT' ],
},
postalCode: { type: 'string' },
},
};
在我们的大多数用例中,只有国家/地区代码才能使位置有效。但是,我们有几次需要邮政编码。
例如,我们案例中的公司总是需要邮政编码。我们以前的location
架构当然不会强制执行此操作。其他模式需要不强制存在邮政编码的位置对象。这是我们公司的架构:
{
type: 'object',
required: [ 'name', 'location' ],
additionalProperties: false,
properties: {
location: { $ref: 'location' },
name: { type: 'string' },
website: { type: 'string' },
},
};
JSON Schema中是否有一种方法可以使用$ ref但是也可以对其进行扩展,以便location
模式中的company
属性自动需要postalCode
?我们当前的解决方案是基于location
创建第二个架构,我们只是更改了required
属性,但我希望有更好的方法。
谢谢。
答案 0 :(得分:5)
你可以
{
type: 'object',
required: [ 'name', 'location' ],
additionalProperties: false,
properties: {
location: {
allOf: [
{ $ref: 'location' },
{ required: [ 'postalCode' ] }
]
},
name: { type: 'string' },
website: { type: 'string' }
}
}