【问题标题】:JSON schema that validates if patternProperties matches one of the value验证 patternProperties 是否与值之一匹配的 JSON 模式
【发布时间】:2017-12-30 01:00:42
【问题描述】:

鉴于此架构:

{
  "type": "object",
  "patternProperties": {
    "^(.*)$": {
      "type": "object",
      "patternProperties": {
        "^.*$": {
          "oneOf": [
            {
              "type": "string",
              "enum": ["Token1", "Token2", "Token3"]
            }
          ]
        }
      }
    }
  }
}

我能够验证此类数据:

{
  "myobject": {
    "prop1": "Token1",
    "prop2": "Token2",
    "prop3": "Token3"
  },
  "anotherobject": {
    "otherprop1": "Token1",
    "otherprop2": "Token3"
  }
}

即顶级对象下的每个属性值都应该在["Token1", "Token2", "Token3"] 枚举中。如果我将Token4 设置为值,它会按预期失败。

是否可以匹配捕获组^(.*)$ 模式的值并在oneOf 下添加另一条规则,这意味着:或者该值位于(顶级)对象名称集中?要成功验证这样的事情:

{
  "myobject": {
    "prop1": "Token1",
    "prop2": "Token2",
    "prop3": "Token3"
  },
  "anotherobject": {
    "otherprop1": "myobject",    <- note this
    "otherprop2": "Token3"
  }
}

但失败了

{
  "myobject": {
    "prop1": "Token1",
    "prop2": "Token2",
    "prop3": "Token3"
  },
  "anotherobject": {
    "otherprop1": "non-existing-object",    <- note this
    "otherprop2": "Token3"
  }
}

并且最好/可选地检查基本递归以使该输入失败:

{
  "myobject": {
    "prop1": "Token1",
    "prop2": "Token2",
    "prop3": "Token3"
  },
  "anotherobject": {
    "otherprop1": "anotherobject",    <- note this
    "otherprop2": "Token3"
  }
}

【问题讨论】:

    标签: json jsonschema json-schema-validator


    【解决方案1】:

    不适用于 JSON 架构。它的领域是结构验证;像您描述的规则可以在代码中实现。一些验证器允许自定义关键字。

    顺便说一句,您可以使用 AdditionalProperties 关键字将架构应用于所有属性。

    【讨论】:

    • 允许在patternProperties 中捕获组并让我们通过\1 引用它会非常超出架构范围吗?
    • 另外,您能否展示一下代码,您将如何使用additionalProperties 简化给定的架构?
    • 这个可以推荐给JSON Schema org,但我觉得不太可能被接受。
    • 当“properties”关键字不存在时,patternProperties:{'^.*$': schema}等价于additionalProperties: schema
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多