json 模式中基于枚举值的两种绑定依赖关系
Two way binding dependences based on enum value in json schema
我有一个大四学生,我必须验证以下 json 数据的架构。
{
'userId': 123,
'userType': CUSTOMER
}
关于JSON的信息: userId
是一个整数,userType
是枚举['Customer','Admin','Guest']
所以问题是我想根据 JSON 模式验证 JSON 数据:
- 如果存在
userId
,则需要 userType
。
- 如果
userType
['Customer','Admin']
存在但 userId 不存在,那么它不应验证 JSON 数据。
- 但是如果
userType
是 ['Guest']
那么他们的 userId 是必需的。
这里我达到了第 1 点,但无法达到第 2 点和第 3 点:
{
'type': 'object',
'properties': {
'user': {
'type': 'integer',
'minimum': 0
},
'userType': {
'type': 'string',
'enum': ['Customer','Admin','Guest'],
}
},
'dependencies': {
'userId': ['userType']
}
}
任何人都可以建议我 json 架构解决方案吗?
我认为您可以使用 json 模式的 属性 anyOf 来解决它,您可以添加多个模式来验证 userType
是否为 Customer
或 Admin
强制使用一种模式,如果用户类型是 Guest
则强制使用另一种模式,如下所示:
{
"anyOf": [
{
"type": "object",
"properties": {
"user": {
"type": "integer",
"minimum": 0
},
"userType": {
"type": "string",
"enum": [
"Customer",
"Admin"
]
}
}
},
{
"type": "object",
"properties": {
"user": {
"type": "integer",
"minimum": 0
},
"userType": {
"type": "string",
"enum": [
"Guest"
]
},
"userId": {
"type": "string"
}
}
}
]
}
我有一个大四学生,我必须验证以下 json 数据的架构。
{
'userId': 123,
'userType': CUSTOMER
}
关于JSON的信息: userId
是一个整数,userType
是枚举['Customer','Admin','Guest']
所以问题是我想根据 JSON 模式验证 JSON 数据:
- 如果存在
userId
,则需要userType
。 - 如果
userType
['Customer','Admin']
存在但 userId 不存在,那么它不应验证 JSON 数据。 - 但是如果
userType
是['Guest']
那么他们的 userId 是必需的。
这里我达到了第 1 点,但无法达到第 2 点和第 3 点:
{
'type': 'object',
'properties': {
'user': {
'type': 'integer',
'minimum': 0
},
'userType': {
'type': 'string',
'enum': ['Customer','Admin','Guest'],
}
},
'dependencies': {
'userId': ['userType']
}
}
任何人都可以建议我 json 架构解决方案吗?
我认为您可以使用 json 模式的 属性 anyOf 来解决它,您可以添加多个模式来验证 userType
是否为 Customer
或 Admin
强制使用一种模式,如果用户类型是 Guest
则强制使用另一种模式,如下所示:
{
"anyOf": [
{
"type": "object",
"properties": {
"user": {
"type": "integer",
"minimum": 0
},
"userType": {
"type": "string",
"enum": [
"Customer",
"Admin"
]
}
}
},
{
"type": "object",
"properties": {
"user": {
"type": "integer",
"minimum": 0
},
"userType": {
"type": "string",
"enum": [
"Guest"
]
},
"userId": {
"type": "string"
}
}
}
]
}