【发布时间】:2019-12-13 06:57:43
【问题描述】:
我正在使用AJV 尝试验证一些数据并根据另一个属性的值动态要求属性。
我要验证的是:
- enabled 始终是必需的,
- 如果 enabled = true 则必须提供其他属性之一(realtime、threshold 或 digest),
样本负载和预期结果:
应该通过
{
"notifications": {
"enabled": false
}
}
应该通过
{
"notifications": {
"enabled": true,
"realtime": true
}
}
应该通过
{
"notifications": {
"enabled": true,
"digest": true
}
}
应该通过
{
"notifications": {
"enabled": true,
"threshold": {}
}
}
应该失败,因为 enabled = true 但没有设置其他属性。
{
"notifications": {
"enabled": true
}
}
应该失败,因为 enabled = true 并且设置了多个其他属性。
{
"notifications": {
"enabled": true,
"threshold": {},
"digest: true
}
}
这是我正在使用的验证架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Settings",
"type": "object",
"properties": {
"notifications": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"realtime": {
"type": "boolean"
},
"threshold": {
"type": "object",
"properties": {
"detections": {
"type": "number"
},
"elapsed": {
"type": "number"
}
},
"required": ["detections", "elapsed"]
},
"digest": {
"type": "boolean"
}
},
"required": ["enabled"],
"if": {
"properties": { "enabled": true }
},
"then": {
"oneOf": [
{ "required": [ "realtime" ] },
{ "required": [ "threshold" ] },
{ "required": [ "digest" ] }
]
}
}
}
}
谢谢!
【问题讨论】:
-
你的意思是,到目前为止你有这个 Schema 但它不起作用?
-
我不明白你的问题是什么。你能更具体一点吗?也许举一些数据作为您希望通过和失败的数据的示例?
-
@Relequestual - 我更新了问题,欢迎尝试。
-
您的解决方案与我在您更新问题后的建议几乎相同。
标签: javascript jsonschema ajv