【发布时间】:2016-11-08 01:49:34
【问题描述】:
这是简化的 JSON 架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "user",
"type": "object",
"properties": {
"account": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["COMPANY", "PERSON"]
}
},
"required": ["type"]
},
"person": {
"type": "object",
"properties": {
"firstName": { "type": "string" },
"lastName": { "type": "string" }
},
"required": ["firstName", "lastName"]
},
"company": {
"type": "object",
"properties": {
"name": { "type": "string" },
"taxNumber": { "type": "string" }
}
}
},
"required": ["account", "person"]
}
我想要实现的是:
- 如果
account.type设置为"COMPANY":-
company对象及其属性应该是必需的。
-
- 如果
account.type设置为"PERSON":-
companyobject 应该是可选的。 - 但如果存在
company对象,则company.name和company.taxNumber应该是必需的。
-
这可以通过在 oneOf 下定义两个长子架构来实现,但这意味着太多的重复项和复杂的架构,因为 account 和 company 具有比这个简化版本更多的属性。
AFAIK,在模式中定义特定值的唯一方法是将 enum 关键字与单个项目一起使用。我用 dependencies 关键字尝试了这个,但没有帮助。
你能想出一种不改变数据对象结构的方法吗?
【问题讨论】:
-
您使用什么语言?是 JavaScript 吗?
-
JS 但语言无关紧要。这需要在 JSON 模式中完成,而不是在 JS 代码中。
标签: json dependencies jsonschema