首页 > 解决方案 > json schema oneOf 验证问题...无法获得正确的验证

问题描述

我需要帮助来验证具有以下约束的 json 对象。

我的对象有四个子对象。

有效对象

无效对象

obj2、obj3、obj4 中只有一个可以存在或不应该存在。

标签: jsonschemajson-schema-validator

解决方案


表达互斥属性非常简单。

"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"] } }
}

它的代码更少并且可扩展性更好,但目前尚不清楚它在做什么或它如何/为什么工作(它确实有效,我保证)。


推荐阅读