【发布时间】:2018-11-30 19:13:06
【问题描述】:
我有六个属性:姓名、年龄、电话、deletePhone、地址、deleteAddress。
我想创建允许上述任何属性的架构,但电话不应出现在 deletePhone 中,并且地址不应出现在 deleteAddress 中(反之亦然)。
我已经尝试过这个架构:
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "number"
},
"phone": {
"type": "number"
},
"deletePhone": {
"type": "boolean"
},
"address": {
"type": "string"
},
"deleteAddress": {
"type": "boolean"
}
},
"allOf": [
{
"oneOf": [
{
"required": ["phone"]
},
{
"required": ["deletePhone"]
}
]
},
{
"oneOf": [
{
"required": ["address"]
},
{
"required": ["deleteAddress"]
}
]
}
]
}
验证为真
{
"name": "my name",
"address": "some addr",
"phone": 34
}
并验证为假
{
"address": "some addr",
"phone": 34,
"deletePhone": true
}
这是正确的,但它也验证为假
{
"phone": 34
}
or
{
"name": "some name"
}
我想验证的是真的,我知道我错过了 anyOf、oneOf 的某种组合,或者有没有更好的方法?
【问题讨论】:
-
如果您可以访问支持最新草案 (draft-7) 的实现,您可能需要查看规范中的
ifthenelse关键字。如果没有,还有办法,但更做作。抱歉,我现在不能写答案。
标签: json jsonschema