JSON 具有 A 和 B 或 C 必需属性的对象的架构
JSON schema for object with either A and B or C required properties
对于一个请求,我有两个可能的 JSON 对象:
{
"from": "string",
"to": "string",
"text": "string"
}
或
{
"number": "integer",
"text": "string"
}
在这两种情况下,"text" 属性 是可选的。需要其他属性("number, or both "from" 和 "to")。
验证这一点的正确 JSON 模式是什么?
终于成功建立了正确的方案。
{
"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"}
]
}
这是我认为更清楚一点的另一种解决方案。 dependencies
子句确保 "from" 和 "to" 总是成对出现。然后 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"] }
]
}
对于一个请求,我有两个可能的 JSON 对象:
{
"from": "string",
"to": "string",
"text": "string"
}
或
{
"number": "integer",
"text": "string"
}
在这两种情况下,"text" 属性 是可选的。需要其他属性("number, or both "from" 和 "to")。
验证这一点的正确 JSON 模式是什么?
终于成功建立了正确的方案。
{
"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"}
]
}
这是我认为更清楚一点的另一种解决方案。 dependencies
子句确保 "from" 和 "to" 总是成对出现。然后 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"] }
]
}