Json 复杂结构的架构有效性
Json schema validade for complex structure
嗨,我需要帮助生成一个 json 模式来验证表单,下面的例子是一个成员数组,有很多成员类型,类型 1 是
项目经理,2 类系统分析师,3 类是开发人员。我需要验证项目是否包含成员列表:
类型 1 的最小值 1 和最大值 1;
最小 1 最大 2 类型 2;
最小 2 最大 2 类型 3.
{
"members": [
{
"memberid": 1,
"membername": "John",
"type": 1
},
{
"memberid": 2,
"membername": "Jack",
"type": 2
},
{
"memberid": 3,
"membername": "Peter",
"type": 3
},
{
"memberid": 4,
"membername": "Jorge",
"type": 3
},
{
"memberid": 5,
"membername": "Clay",
"type": 3
}
]
}
这是一个艰难的过程。此解决方案的唯一限制是它要求成员按特定顺序排列。此外,如果将来需要其他组合,架构可能会失控。
{
"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" }
}
}
}
}
嗨,我需要帮助生成一个 json 模式来验证表单,下面的例子是一个成员数组,有很多成员类型,类型 1 是
项目经理,2 类系统分析师,3 类是开发人员。我需要验证项目是否包含成员列表: 类型 1 的最小值 1 和最大值 1; 最小 1 最大 2 类型 2; 最小 2 最大 2 类型 3.
{
"members": [
{
"memberid": 1,
"membername": "John",
"type": 1
},
{
"memberid": 2,
"membername": "Jack",
"type": 2
},
{
"memberid": 3,
"membername": "Peter",
"type": 3
},
{
"memberid": 4,
"membername": "Jorge",
"type": 3
},
{
"memberid": 5,
"membername": "Clay",
"type": 3
}
]
}
这是一个艰难的过程。此解决方案的唯一限制是它要求成员按特定顺序排列。此外,如果将来需要其他组合,架构可能会失控。
{
"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" }
}
}
}
}