嵌套对象

时间:2019-02-20 17:59:13

标签: jsonschema

在JSON模式中,我试图基于嵌套对象中的值进行条件验证。我的架构和示例JSON如下。用简单的英语来说,我的规则是“如果bar.sub2是'cat',则需要baz”。

我的示例JSON通过了验证,并且由于baz不正确而应该失败。我可以合理地确定条件逻辑是正确的,并且bar.sub2的指针是不正确的。但我似乎无法弄清楚如何正确执行此操作的语法和结构。

示例JSON

    {"foo": "someValue"
     ,"bar": {"sub1":"someValue", "sub2": "cat"}
    }

模式:

    {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "foo": { "type": "string"}
        ,"bar" : {
            "type": "object"
            ,"properties": {
                "sub1": { "type": "string"}
                ,"sub2": { "type": "string"}
            },
            "required" :["sub1","sub2"]
        }
        ,"baz":{"type": "string"}

  },

  "oneOf":[
    {"properties": {"not": {"/bar/sub2": { "enum": ["cat"]}}}}
    ,{"required" : ["baz"]}
  ],


  "required": ["foo","bar"],

  "definitions":{}

}

编辑: 找到了自己的答案here

正确的架构:

"oneOf":[
    {"not" : {"$ref": "#/definitions/sub2IsCat"}}
    ,{"required" : ["baz"]}
  ],

  "definitions":{
    "sub2IsCat" :{
        "properties":{ 
            "bar": {
              "properties":{
                   "sub2" :{ "enum": ["cat"] }}}}}

  }

0 个答案:

没有答案