这是一个艰难的过程。此解决方案的唯一限制是它要求成员按特定顺序排列。此外,如果将来需要其他组合,架构可能会失控。
{
"type": "object",
"properties": {
"members": { "$ref": "#/definitions/members" }
},
"definitions": {
"members": {
"oneOf": [
{ "$ref": "#/definitions/smallTeam" },
{ "$ref": "#/definitions/largeTeam" }
]
},
"smallTeam": {
"type": "array",
"items": [
{ "$ref": "#/definitions/projectManager" },
{ "$ref": "#/definitions/systemAnalyst" },
{ "$ref": "#/definitions/developer" },
{ "$ref": "#/definitions/developer" }
],
"additionalItems": false
},
"largeTeam": {
"type": "array",
"items": [
{ "$ref": "#/definitions/projectManager" },
{ "$ref": "#/definitions/systemAnalyst" },
{ "$ref": "#/definitions/systemAnalyst" },
{ "$ref": "#/definitions/developer" },
{ "$ref": "#/definitions/developer" }
],
"additionalItems": false
},
"projectManager": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/member" }],
"properties": {
"type": { "enum": [1] }
}
},
"systemAnalyst": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/member" }],
"properties": {
"type": { "enum": [2] }
}
},
"developer": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/member" }],
"properties": {
"type": { "enum": [3] }
}
},
"member": {
"type": "object",
"properties": {
"memberid": { "type": "integer" },
"membername": { "type": "string" }
},
"required": ["memberid", "membername", "type"]
}
}
}
你能控制这个结构吗?如果有点不同,描述起来会容易得多。
{
"type": "object",
"properties": {
"projectManager": { "$ref": "#/definitions/member" },
"systemAnalyst": {
"type": "array",
"items": { "$ref": "#/definitions/member" },
"minItems": 1,
"maxItems": 2
},
"developer": {
"type": "array",
"items": { "$ref": "#/definitions/member" },
"minItems": 1,
"maxItems": 2
}
},
"definitions": {
"member": {
"type": "object",
"properties": {
"memberid": { "type": "integer" },
"membername": { "type": "string" }
}
}
}
}