【问题标题】:JSON Schema: verifying object's values, without keysJSON Schema:验证对象的值,没有键
【发布时间】:2015-09-16 00:41:36
【问题描述】:

为了不让任何人感到困惑,我将从验证数组开始...

关于数组,JSON Schema可以检查(((...)sub)sub)数组的元素是否符合结构:

"type": "array",
"items": {
  ...
}

在验证对象时,我知道我可以传递某些键及其对应的值类型,例如:

"type": "object",
"properties": {
  // key-value pairs, might also define subschemas
}

但是,如果我有一个 对象,我想用它来验证 values only(没有键)?

我的真实案例是我正在配置按钮:可能有 editdeleteadd 按钮等等。它们都有特定的、严格的结构,我确实有 JSON 模式。但我不想仅限于['edit', 'delete', 'add'],将来可能会有publishprint。但我知道它们都会符合我的子模式。

每个按钮是:

BUTTON = {
  "routing": "...",
  "params": { ... },
  "className": "...",
  "i18nLabel": "..."
}

我有一个对象(不是一个数组)按钮:

{
  "edit": BUTTON,
  "delete": BUTTON,
  ...
}

如何编写这样的 JSON 模式?有什么方法可以将objectitems 结合起来(我知道有对象属性和数组项关系)。

【问题讨论】:

    标签: arrays json object jsonschema


    【解决方案1】:

    您可以为此使用additionalProperties。如果您将 additionalProperties 设置为架构而不是布尔值,则任何未使用 propertiespatternProperties 关键字显式声明的属性都必须与给定架构匹配。

    {
      "type": "object",
      "additionalProperties": {
        ... BUTTON SCHEMA ...
      }
    }
    

    http://json-schema.org/latest/json-schema-validation.html#anchor64

    【讨论】:

    • 你是真正的 JSON Schema 专家 :)
    • 如果你想制定一个类似数组的规则,必须至少有 1 个键值对呢?这也可行吗?
    • @majorBummer 是的,只需添加"minProperties": 1
    • 现在我使用additionalProperties 来指定我的“子对象”中的键,我怎么说除了那些指定的键之外我不想要任何其他属性?再次感谢!
    • @majorBummer 不知道在问什么。任何其他属性都必须与架构匹配。不能有任何其他附加属性。
    猜你喜欢
    • 2015-10-24
    • 2021-10-06
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多