【问题标题】:How to validate a object based on the value of root object in json schema?如何根据 json 模式中根对象的值验证对象?
【发布时间】:2020-10-08 07:59:34
【问题描述】:

我想根据 ordertype 的值验证销售日期和客户可用性。(注意,它们不在同一个对象下)。有没有办法根据根值验证子值?

 {
      "type": "object",
      "properties": {
        "Order": {
          "type": "object",
          "properties": {
            "OrderDetails": {
              "type": "object",
              "properties": {
                "OrderType": {
                  "type": "string",
                  "enum": [
                    "Y",
                    "N"
                  ]
                }
              }
            }
          }
        },
        "Sale": {
          "type": "object",
          "properties": {
            "Saledate": {
              "format": "date"/*should be present when OrderType is Y*/
            }
          }
        },
        "Customer": {
          "type": "object",
          "properties": {
            "Avilability": {
              "type": "string",
              "enum": [
                "Y",
                "N"
              ]/*should be present when orderType is Y*/
            }
          }
        }
      }
    }

【问题讨论】:

    标签: json jsonschema json-schema-validator


    【解决方案1】:

    您可以使用if/then 来创建描述约束。诀窍是您需要在架构中足够高的级别添加约束,以涵盖所有涉及的属性。

    {
      ...
      "if": {
        "type": "object",
        "properties": {
          "Order": {
            "type": "object",
            "properties": {
              "OrderDetails": {
                "type": "object",
                "properties": {
                  "OrderType": { "const": "Y" }
                },
                "required": ["OrderType"]
              }
            },
            "required": ["OrderDetails"]
          }
        },
        "required": ["Order"]
      },
      "then": {
        "properties": {
          "Sale": { "required": ["Saledate"] },
          "Customer": { "required": ["Availability"] }
        },
        "required": ["Sale", "Customer"]
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多