ajv 模式似乎失败了,不知道为什么会发生这种情况
速度 ajv 方案
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Update app config Support & Ticketing",
"type": "object",
"properties": {
"servicenowEnabled": {
"type": "boolean"
},
"servicenowClientId": {
"type": "string"
},
"servicenowClientSecret": {
"type": "string"
},
"servicenowBaseUrl": {
"type": "string",
"format": "regex",
"pattern": ".*service-now.com$"
},
"servicenowKnowledgeBaseEnabled": {
"type": "boolean"
},
"servicenowKnowledgeBaseSelected": {
"type": "object",
"properties": {
"showAll": {
"type": "boolean"
},
"selectedList": {
"type": "array",
"items": {
"type": "object"
},
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
}
}
},
"required": [
"showAll"
],
"if": {
"properties": {
"showAll": {
"const": true
}
}
},
"then": {
"properties": {
"selectedList": {
"const": []
}
}
},
"else": {
"properties": {
"selectedList": {
"minItems": 1
}
}
}
},
"servicenowKnowledgeBaseName": {
"type": "string",
"minLength": 1
},
"servicenowKnowledgeBaseUrl": {
"type": "string",
"format": "uri"
},
"servicenowTicketsEnabled": {
"type": "boolean"
},
"servicenowTicketsName": {
"type": "string",
"minLength": 1
},
"servicenowTicketsUrl": {
"type": "string",
"format": "uri"
},
"servicenowCreateTicketsEnabled": {
"type": "boolean"
},
"servicenowNotificationEnabled": {
"type": "boolean"
}
},
"allOf": [
{
"if": {
"properties": {
"servicenowEnabled": {
"const": true
}
}
},
"then": {
"required": [
"servicenowEnabled",
"servicenowBaseUrl"
]
},
"else": {
"required": [
"servicenowEnabled"
]
}
},
{
"if": {
"properties": {
"servicenowKnowledgeBaseEnabled": {
"const": true
}
}
},
"then": {
"required": [
"servicenowKnowledgeBaseUrl",
"servicenowKnowledgeBaseName",
"servicenowKnowledgeBaseSelected"
]
},
"else": true
}
],
"additionalProperties": false
}
的测试用例失败
{
servicenowEnabled: false,
servicenowBaseUrl: 'http: //base-url.service-now.com',
servicenowClientId: 'clientID',
servicenowClientSecret: 'clientSecret'
}
我什至尝试添加 not required 而不是 else: true 但没有效果,我也尝试了几件事,但似乎没有任何效果。我只想让一个字段严格可用,否则基于其他一些布尔值
第 34 行的架构中有错误,
properties
未正确定义。
我为您修正了
if, then
语句。现在,您提供的示例已通过。
servicenowEnabled
现在是 required
位于根模式,如果值为 true
,则 servicenowBaseUrl
为 required
我还对
selectedList
required
属性以及满足 selectedList
条件时对 showAll: false
本身的要求添加了更多约束。
请检查并告诉我这是否适合您。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Update app config Support & Ticketing",
"type": "object",
"properties": {
"servicenowEnabled": {
"type": "boolean"
},
"servicenowClientId": {
"type": "string"
},
"servicenowClientSecret": {
"type": "string"
},
"servicenowBaseUrl": {
"type": "string",
"format": "regex",
"pattern": ".*service-now.com$"
},
"servicenowKnowledgeBaseEnabled": {
"type": "boolean"
},
"servicenowKnowledgeBaseSelected": {
"type": "object",
"properties": {
"showAll": {
"type": "boolean"
},
"selectedList": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
}
}
}
},
"required": ["showAll"],
"if": {
"properties": {
"showAll": {
"const": false
}
}
},
"then": {
"required": ["selectedList"],
"properties": {
"selectedList": {
"minItems": 1
}
}
}
},
"servicenowKnowledgeBaseName": {
"type": "string",
"minLength": 1
},
"servicenowKnowledgeBaseUrl": {
"type": "string",
"format": "uri"
},
"servicenowTicketsEnabled": {
"type": "boolean"
},
"servicenowTicketsName": {
"type": "string",
"minLength": 1
},
"servicenowTicketsUrl": {
"type": "string",
"format": "uri"
},
"servicenowCreateTicketsEnabled": {
"type": "boolean"
},
"servicenowNotificationEnabled": {
"type": "boolean"
}
},
"required": ["servicenowEnabled"],
"allOf": [
{
"if": {
"properties": {
"servicenowEnabled": {
"const": true
}
}
},
"then": {
"required": ["servicenowBaseUrl"]
}
},
{
"if": {
"required": ["servicenowKnowledgeBaseEnabled"],
"properties": {
"servicenowKnowledgeBaseEnabled": {
"const": true
}
}
},
"then": {
"required": [
"servicenowKnowledgeBaseUrl",
"servicenowKnowledgeBaseName",
"servicenowKnowledgeBaseSelected"
]
}
}
],
"additionalProperties": false
}