JSON
架构具有 required
属性,该属性列出了 JSON 对象中的必填字段。例如,以下(简化)架构验证向用户发送文本消息的调用:
{
"type": "object",
"properties": {
"userId": { "type": "string" },
"text": { "type": "string" },
},
"required": ["userId", "text"]
}
假设我想启用向多个用户发送消息,即具有userId
字段或userIds
数组(但不能两者兼而有之或两者都没有)。有没有办法在 JSON 架构中表达这样的条件?
当然,在这种情况下有一些方法可以克服这个问题 - 例如,具有单个元素的userId
数组 - 但一般情况很有趣且有用。
您现在可能已经解决了这个问题,但这可以在字段的type
上使用oneOf
来完成。
{
"type": "object",
"properties": {
"userId": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"text": {
"type": "string"
}
},
"required": ["userId", "text"]
}
一点
也不优雅,但我认为你可以从allOf
和oneOf
中破解它。像这样:
{
"allOf" : [
{
"type" : "object",
"properties" : {
// base properties come here
}
},
"oneOf" : [
{
"properties" : {
"userIds" : {"type" : "array"}
},
"required" : ["userIds"]
},
{
"properties" : {
"userId" : {"type" : "number"}
},
"required" : ["userId"]
}
]
]
}