jsonschema - json schema oneOf 验证问题...无法获得正确的验证
问题描述
我需要帮助来验证具有以下约束的 json 对象。
我的对象有四个子对象。
有效对象
{"obj" : { "obj1" : {}, "obj2" : {} } }
{"obj" : { "obj1" : {}, "obj3" : {} } }
{"obj" : { "obj1" : {}, "obj4" : {} } }
{"obj" : { "obj1" : {} } }
无效对象
{"obj" : { "obj1" : {}, "obj3" : {}, "obj4" : {} } }
{"obj" : { "obj1" : {}, "obj2" : {}, "obj4" : {} } }
{"obj" : { "obj1" : {}, "obj2" : {}, "obj3" : {} } }
{"obj" : { "obj1" : {}, "obj2" : {}, "obj3" : {}, "obj4" : {} } }
obj2、obj3、obj4 中只有一个可以存在或不应该存在。
解决方案
表达互斥属性非常简单。
"oneOf": [
{ "required": ["obj2"] },
{ "required": ["obj3"] },
{ "required": ["obj4"] }
]
棘手的部分是“或无”约束。您必须向oneOf
禁止所有属性的模式添加模式。有几种方法可以做到这一点,但我认为以下是最干净的,如果不是最直接的。
"oneOf": [
{
"properties": {
"obj2": false,
"obj3": false,
"obj4": false
}
},
{ "required": ["obj2"] },
{ "required": ["obj3"] },
{ "required": ["obj4"] }
]
另一种方法是使用dependencies
而不是oneOf
.
"dependencies": {
"obj2": { "not": { "required": ["obj3"] } },
"obj3": { "not": { "required": ["obj4"] } },
"obj4": { "not": { "required": ["obj2"] } }
}
它的代码更少并且可扩展性更好,但目前尚不清楚它在做什么或它如何/为什么工作(它确实有效,我保证)。
推荐阅读
- python - 是否可以在 mikrotik 热点网络下使用 django 获取确切的客户端本地 IP 地址?
- python - ipywidget 文本输入和 ipysheet 交互 + 瞧
- c# - 在 C# 中读取 Oracle 重做(事务)日志文件
- python - 从 Numpy 数组中删除元素,直到 y 在每个值中都有等效元素
- html - 使用 CSS id 设置 td 元素的宽度
- python - 运行 DBSCAN 后如何将 x 和 y 值提取为新数组?
- sql - 如何批量插入 SQL Server?
- ssis - SSIS 文件系统任务 - 移动目录
- python - 无法从 django 视图中的数据库中删除项目
- vue.js - 如何调出“您确定要离开页面吗?” vue.js 路由器中的弹出窗口?