Validation jsonSchema属性有条件地需要依赖于父对象
根据这个问题,我可以应用条件必需属性。但是,它只能依赖于同一级别对象上的属性。在某些情况下,我希望一个所需的属性依赖于其父对象属性,是否可能?对于以下示例:Validation jsonSchema属性有条件地需要依赖于父对象,validation,conditional,jsonschema,Validation,Conditional,Jsonschema,根据这个问题,我可以应用条件必需属性。但是,它只能依赖于同一级别对象上的属性。在某些情况下,我希望一个所需的属性依赖于其父对象属性,是否可能?对于以下示例: { type: 'object', properties: { { os: { type: 'string', enum: ['macOs', 'windows'] }, specs: { macModel: { type: 'string',
{
type: 'object',
properties: {
{
os: { type: 'string', enum: ['macOs', 'windows'] },
specs: {
macModel: {
type: 'string',
enum: ['macbook air', 'macbook pro', 'macbook']
},
memory: { type: 'number' }
}
}
}
}
是否可能满足此要求:/spec/macModel仅在/os等于macOs时才需要?是的,同样的方法适用。您只需要将模式嵌套得更深一点
{
"type": "object",
"properties": {
"os": { "enum": ["macOs", "windows"] },
"specs": {
"type": "object",
"properties": {
"macModel": { "enum": ["macbook air", "macbook pro", "macbook"] },
"memory": { "type": "number" }
}
}
},
"allOf": [{ "$ref": "#/definitions/os-macOs-requires-macModel" }],
"definitions": {
"os-macOs-requires-macModel": {
"anyOf": [
{ "not": { "$ref": "#/definitions/os-macOs" } },
{ "$ref": "#/definitions/requires-macModel" }
]
},
"os-macOs": {
"properties": {
"os": { "const": "macOs" }
},
"required": ["os"]
},
"requires-macModel": {
"properties": {
"specs": {
"required": ["macModel"]
}
}
}
}
}
请注意,在/definitions/requires macModel模式中,它必须深入specs属性,并将所需的属性放在那里,而不是放在最顶层,因为它是在普通情况下
我在本例中使用了隐含模式,但如果您喜欢该方法并有权访问draft-07验证器,则可以使用if-then-else关键字实现此目的。如果规范不足以让您开始,请让我知道它是有效的,将验证放入allOf是一个很好的模式,谢谢。