【发布时间】:2014-06-20 14:55:11
【问题描述】:
我有一个我试图在 JSON 模式中定义的遗留 API,并且该对象有一个奇怪的结构,其中有一组 4 个属性,其中任何一个都是必需的,其中 3 个是互斥的。之后还有 30 多个共享可选属性,我将它们记为 ...。
例如,
{ "foo": "bar", "baz": 1234, ... } // OK
{ "foo": "bar", "buzz": 1234, ... } // OK
{ "foo": "bar", "fizz": 1234, ... } // OK
{ "foo": 1234, ... } // OK
{ "baz": 1234, ... } // OK
{ ... } // NOT OK
{ "baz": 1234, "buzz": 1234, ... } // NOT OK
我可以做一个oneOf,但这不允许foo与其他人一起出现,anyOf允许baz、buzz和fizz彼此出现,这是不可能的。
我尝试定义如下内容:
{
"type": "object",
"properties": {
"foo": {"type": "string"},
"baz": {"type": "number"},
"buzz": {"type": "number"},
"fizz": {"type": "number"}
},
"anyOf": [
{"required": ["foo"]},
{"required": [{"oneOf": [
{"required": ["baz"]},
{"required": ["buzz"]},
{"required": ["fizz"]}
]}
]}
]
}
和
{
"type": "object",
"properties": {
"foo": {"type": "string"},
"baz": {"type": "number"},
"buzz": {"type": "number"},
"fizz": {"type": "number"}
},
"anyOf": [
{"required": ["foo"]},
{"oneOf": [
{"required": ["baz"]},
{"required": ["buzz"]},
{"required": ["fizz"]}
]
}
]
}
但这不起作用,我只是对 json 架构了解不够,还不知道这是否可能。
【问题讨论】:
标签: json jsonschema