根据父属性或父架构有条件地验证JSON架构 [英] conditionally validate a json schema based on a parent property or parent schema
本文介绍了根据父属性或父架构有条件地验证JSON架构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下json架构
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "MySchema",
"required": ["environment", "datacenter"],
"properties": {
"environment": {
"type": "string",
"title": "environment",
"enum": ["DEV", "STG", "PROD"]
},
"datacenter": {
"type": "object",
"title": "datacenter",
"properties": {
"value": {
"$ref": "#/definitions/datacenter"
}
}
}
},
"definitions": {
"datacenter": {
"type": "string",
"enum": [ "devDC1", "devDC2", "stgDC1", "stgDC2", "prodDC1", "prodDC2" ]
}
}
}
这里是如何简单地使用它
{
"$schema": "http://localhost/schemas/v3/env.json",
"environment": "DEV",
"datacenter": {
"value": "devDC1"
}
}
我尝试做的事情类似于
如果将环境设置为DEV,则我应该只能为数据中心属性值选择devDC1和devDC2,如果我为环境选择stg,则允许使用stgDC1和stgDC2,对于prod也是如此
请注意 架构中的"$ref": "#/definitions/datacenter"
实际上正在引用另一个文件
推荐答案
可以使用if
+allOf
(参见第二个示例here),例如:
"allOf": [
{
"if": {"properties": {"environment": {"const": "DEV"}}},
"then": {"properties": {"datacenter": {"properties": {"value": {"pattern": "^dev"}}}}}
},
{
"if": {"properties": {"environment": {"const": "STG"}}},
"then": {"properties": {"datacenter": {"properties": {"value": {"pattern": "^stg"}}}}}
},
{
"if": {"properties": {"environment": {"const": "PROD"}}},
"then": {"properties": {"datacenter": {"properties": {"value": {"pattern": "^prod"}}}}}
}
]
请注意,除此之外,您还需要将"required": ["value"]
添加到/properties/datacenter
中(否则"datacenter": {}
也将与环境无关地被接受)。
这篇关于根据父属性或父架构有条件地验证JSON架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文