【问题标题】:How to add required to sub array in a json schema?如何在 json 模式中添加所需的子数组?
【发布时间】:2021-04-23 13:05:01
【问题描述】:

我正在创建一个 json 模式来定义具有数据类型的必要数据。有一些数据需要设置到required 字段中。但在其文档中没有找到如何做到这一点。

对于这个 json 架构:

{
  "type": "object",
  "required": [
    "version",
    "categories"
  ],
  "properties": {
    "version": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1
    },
    "categories": {
      "type": "array",
      "items": [
        {
          "title": {
            "type": "string",
            "minLength": 1
          },
          "body": {
            "type": "string",
            "minLength": 1
          }
        }
      ]
    }
  }
}

json 喜欢

{
   "version":"1",
   "categories":[
      {
         "title":"First",
         "body":"Good"
      },
      {
         "title":"Second",
         "body":"Bad"
      }
   ]
}

我也想将title 设置为必需。它在一个子数组中。如何在 json schema 中设置?

【问题讨论】:

    标签: arrays json schema jsonschema required


    【解决方案1】:

    您的架构有一些问题。我假设您使用的是 JSON Schema 草案 2019-09。

    首先,您希望items 是一个对象,而不是一个数组,因为您希望它应用于数组中的每个项目。

    如果“items”是一个模式,则验证成功,如果
    数组已成功验证该架构。

    如果“items”是一个模式数组,则验证成功,如果每个
    实例的元素同时针对架构进行验证
    位置,如果有的话。

    https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-02#section-9.3.1.1

    其次,如果items的值应该是一个schema,你需要把它当作一个schema来对待。

    如果我们将您的 items 数组中的项目作为架构,它实际上并没有做任何事情,您需要将它嵌套在 properties 关键字中...

    {
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1
        },
        "body": {
          "type": "string",
          "minLength": 1
        }
      }
    }
    

    最后,现在你的items关键字值是一个模式(subschema),你可以添加任何你可以正常使用的关键字,比如required,和之前一样。

    {
      "required": [
        "title"
      ],
      "properties": {
        ...
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2016-03-17
      • 2019-04-18
      • 2019-05-12
      • 2019-03-22
      相关资源
      最近更新 更多