【问题标题】:jsonschema: List of elements with exactly one default elementjsonschema:只有一个默认元素的元素列表
【发布时间】:2021-05-15 05:10:13
【问题描述】:

我在 jsonschema 验证方面有点挣扎。我有一个包含一些预定义字段的元素列表。正是这些元素之一应该定义一个default 字段。所以是这样的:

{
    "items": [
        {
            "id": 1,
            "name": "item1"
        },
        {
            "id": 2,
            "name": "item2",
            "default": true
        },
        {
            "id": 3,
            "name": "item3"
        }
    ]
}

如果所有项目都没有default 字段或多个字段,则验证应该失败。有任何想法吗?谢谢!

【问题讨论】:

    标签: json validation schema jsonschema


    【解决方案1】:

    您需要使用 JSON Schema 草案 2019-09 中的 maxContains 关键字。

    首先,为了使用最小/最大包含,你需要定义contains

    一个数组实例对“包含”是有效的,如果它的至少一个
    元素对给定架构有效。

    接下来,您需要同时设置 [maxContains][2] to 1`。

    一个数组实例对“maxContains”有效,如果
    对“包含”架构有效的元素
    [json-schema] 小于或等于此关键字的值。

    如果同一架构对象中不存在“包含”,则 此关键字无效。

    您不需要设置minContains,因为它通过使用contains 隐含为1

    允许值 0,但仅用于设置范围
    从 0 到“maxContains”的值。值为 0
    no "maxContains" 导致 "contains" 始终通过验证。

    {
      "$schema": "http://json-schema.org/draft/2019-09/schema",
      "properties": {
        "items": {
          "contains": {
            "required": ["default"]
          },
          "maxContains": 1
        }
      }
    }
    

    这是一个使用您的实例 JSON 的现场演示:https://www.jsonschemavalidator.net/s/p0RQ2hvY

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多