我必须要验证以下json数据的架构。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
country_code = request.headers.get('CF-IPCountry');
var link;
let userAgent = request.headers.get('User-Agent') || ''
if (userAgent.includes('Googlebot')) {
return new Response('', {
status: 301,
headers: {
'Location': "https://www.website.com/"
}
})
}
switch(request.headers.get('CF-IPCountry')) {
case 'TW': // Taiwan
link = "https://www.website.com/twn";
break;
case 'TH': // Thailand
link = "https://www.website.com/tha";
break;
case 'GB': // United Kingdom
link = "https://www.website.com/gbr";
break;
case 'US': // United States
link = "https://www.website.com/us";
break;
default:
link = "https://www.website.com/rotw" // Rest of the world
}
return new Response('', {
status: 301,
headers: {
'Location': link
}
})
}
有关JSON的信息:{
'userId': 123,
'userType': CUSTOMER
}
是整数,而userId
是枚举userType
所以问题是我想基于:
['Customer','Admin','Guest']
,则需要userId
。 userType
userType
但不存在userId,则它不应验证JSON数据。 ['Customer','Admin']
是userType
,则需要他们的userId。 这里我已经达到了第1点,但无法达到第2点和第3点:
['Guest']
有人可以为此建议我json模式解决方案吗?
答案 0 :(得分:2)
我认为您可以使用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"
}
}
}
]
}