我有一个请求有两个可能的JSON对象:
{
"from": "string",
"to": "string",
"text": "string"
}
或
{
"number": "integer",
"text": "string"
}
在这两种情况下"文字"属性是可选的。其他属性是必需的("数字或两者"来自""来自")。
验证这一点的正确JSON模式是什么?
答案 0 :(得分:8)
这是另一个我认为更清楚的解决方案。 dependencies
子句确保"来自"和"到"永远都是一对。然后oneOf
子句可以非常简单,并避免使用不需要的样板。
{
"type": "object",
"properties": {
"from": { "type": "string" },
"to": { "type": "string" },
"number": { "type": "integer" },
"text": { "type": "string" }
},
"dependencies": {
"from": ["to"],
"to": ["from"]
},
"oneOf": [
{ "required": ["from"] },
{ "required": ["number"] }
]
}
答案 1 :(得分:0)
最后设法建立了正确的方案。
{
"definitions": {
"interval": {
"type": "object",
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": ["from", "to"],
"not": {
"required": ["number"]
}
},
"top": {
"type": "object",
"properties": {
"number": {
"type": "integer"
},
"text": {
"type": "string"
}
},
"required": ["number"],
"allOf": [
{
"not": {
"required": ["from"]
}
},
{
"not": {
"required": ["to"]
}
}
]
}
},
"type": "object",
"oneOf": [
{"$ref": "#/definitions/interval"},
{"$ref": "#/definitions/top"}
]
}