【发布时间】:2019-11-30 03:47:09
【问题描述】:
我想根据根架构中是否存在属性,在数组子架构中应用额外的“必需”属性。我的架构设置如下:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required":[
"isParentDependency",
"subArray"
],
"properties": {
"isParentDependency": {
"$id": "#/properties/isParentDependency",
"type": "boolean"
},
"subArray": {
"$id": "#/properties/subArray",
"type": "array",
"items": {
"$id": "#/properties/subArrayItem",
"required": ["alwaysRequiredProp"],
"dependencies": {
"isParentDependency":{
"required":["requiredPropIfIsParentDependency"]
}
},
"properties": {
"alwaysRequiredProp": {
"$id": "#/properties/subArray/items/properties/alwaysRequiredProp",
"type": "boolean"
},
"requiredPropIfIsParentDependency": {
"$id": "#/properties/subArray/items/properties/requiredPropIfIsParentDependency",
"type": "boolean"
}
}
}
}
}
}
通过案例
{
"isParentDependency": false,
"subArray": [{
"alwaysRequiredProp": true
}]
}
"isParentDependency": true,
"subArray": [{
"alwaysRequiredProp": true,
"requiredPropIfIsParentDependency":true
}]
}
失败案例
{
"isParentDependency": true,
"subArray": [{
"alwaysRequiredProp": true
}]
}
显然这行不通,但我一直无法弄清楚如何创建指向根架构的指针(或使用 $ref 应用 if/else 类型的解决方案)
非常感谢任何指导!
【问题讨论】:
-
您无法“向上查看”树,因此您必须在根级别定义所需内容并使用子模式。我很乐意提供帮助,但是请您先清理一下您的示例吗?不完整的 JSON,并且不识别它正在使用哪个草稿(我将假设草稿 7)。此外,请为您的通过和失败条件提供一个 JSON 实例(这将使我能够更快地给您答案)。
-
非常感谢@Relequestual - 我已经(希望)用你需要的东西充实了 Q
-
超级。工作...
标签: javascript jsonschema ajv