cam*_*ous 2 schema json jsonschema
我在json中有此对象,我想使用json模式进行验证
"reference": {
"lookup" : "opportunity",
"shortreference": 93671,
"guid": "4bb30c46-20ec-e511-9408-005056862bfb"
}
Run Code Online (Sandbox Code Playgroud)
lookup属性是强制性的,然后至少需要shortreference或guid或两者兼有。
{
"reference": {
"type": "object",
"description": "opportunity reference",
"properties": {
"lookup": {
"enum": [
"employee",
"opportunity",
"serviceline",
"account"
]
}
},
"anyOf": [
{
"properties": {
"shortreference": {
"type": "integer"
},
"guid": {
"type": "string"
}
}
}
],
"required": [
"lookup"
]
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 我使用以下架构解决了我的问题
{
"reference": {
"type": "object",
"required": [
"lookup"
],
"properties": {
"lookup": {
"type": "string",
"enum" : ["opportunity", "employee", "serviceline", "account"]
}
},
"anyOf": [
{
"properties": {
"shortreference": {
"type": "integer"
}
},
"required": [
"shortreference"
]
},
{
"properties": {
"crmguid": {
"type": "string"
}
},
"required": [
"crmguid"
]
},
{
"properties": {
"springim": {
"type": "integer"
}
},
"required": [
"springim"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是当我同时拥有这两个元素时,不会检查所有输入类型:如果“ shortreference”:“ 12345”(字符串而不是整数),则在提供参数crmguid时,将不会执行有关类型的检查。有没有办法强迫它。(我正在使用AJV:https : //github.com/epoberezkin/ajv)
anyOf一旦找到一个匹配的模式,它将立即停止验证。如果将所有属性声明都拉入架构的根中并且仅包含required在架构中,则它应该可以按预期工作anyOf。这样,所有属性都将进行类型检查,并且anyOf在找到至少一个必需属性时将停止验证。
{
"reference": {
"type": "object",
"required": ["lookup"],
"properties": {
"lookup": {
"type": "string",
"enum" : ["opportunity", "employee", "serviceline", "account"]
},
"shortreference": { "type": "integer" },
"crmguid": { "type": "string" },
"springim": { "type": "integer" }
},
"anyOf": [
{ "required": ["shortreference"] },
{ "required": ["crmguid"] },
{ "required": ["springim"] }
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |