【问题标题】:Put validation of two array fields in JSON Schema using oneOf使用 oneOf 在 JSON Schema 中验证两个数组字段
【发布时间】:2022-11-18 04:53:04
【问题描述】:

我可以检查 JSON 模式中的两个字段吗?这两个字段都是对象数组类型。条件:

  1. 其中任何一个都可以一次包含值(即其他应该为空)。
  2. 两者都可以为空。

    任何线索?

    // The schema
    var schema = {
        "id": "https://kitoutapi.lrsdedicated.com/v1/json_schemas/login-request#",
        "$schema": "http://json-schema.org/draft-04/schema#",
        "description": "Login request schema",
        "type": "object",
        "oneOf": [
           { "categories": {
            "maxItems": 0
        },
        "positionedOffers": {
          "minItems": 1
        }},
        { "categories": {
          "minItems": 1
        },
          "positionedOffers": {
            "maxItems": 0
          }}
        ],
        "properties": {
            "categories": {
                "type": "array"
            },
            "positionedOffers": {
                "type": "array"
            }
        },
        "additionalProperties": false
    };
    
     
    // Test data 1
    // This test should return a good result
    var data1 = {
        "positionedOffers":['hello'],
        "categories":[],
    }
    
    

【问题讨论】:

    标签: jsonschema


    【解决方案1】:

    对于您的要求,我想我会从另一个方向来解决这个问题。而不是说

    如果其中一个包含值,则另一个必须为空,但两者都可以为空。

    我会说

    至少有一个必须是空的。

    这导致您使用带有子模式的 anyOf 检查每个属性是否为空数组。

    {
      "id": "https://kitoutapi.lrsdedicated.com/v1/json_schemas/login-request#",
      "$schema": "http://json-schema.org/draft-04/schema#",
      "description": "Login request schema",
      "type": "object",
      "anyOf": [
        {
          "properties": {
            "categories": {
              "maxItems": 0
            }
          }
        },
        {
          "properties": {
            "positionedOffers": {
              "maxItems": 0
            }
          }
        }
      ],
      "properties": {
        "categories": {
          "type": "array"
        },
        "positionedOffers": {
          "type": "array"
        }
      },
      "additionalProperties": false
    }
    

    奖金材料

    在您的原始帖子中,您省略了oneOf 下的properties 关键字。这可能是架构无法验证的原因。我已经在上面添加了它。

    其次,草案 4 在这一点上已经很老了。您可能会受到所使用的实现的限制,但如果可以的话,您应该考虑使用更新版本的 JSON Schema。您可以在 JSON Schema implementations page 上查看可用的实现及其支持的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多