【问题标题】:Required fields for properties within an array of objects schema definition对象架构定义数组中属性的必填字段
【发布时间】:2016-01-12 08:13:29
【问题描述】:

我有以下架构定义。库是必需的。可以有很多。所以在那个库对象中还有一些其他的属性是必需的。但是,尽管我使用以下代码,但它没有验证。我的意思是不需要书名。作者的标题是必需的。我该如何解决这个问题?

schema definition
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "required": ["library"],
      "properties": {

        "library": { 
          "type": "array",
          "items": [
            {"required":["title"],
              "type": "object",

              "properties": {
                "title": {
                  "type": "string"
                },

                "author": {
                  "type": "string"
                }
              }
            }
          ]
        }}}

json 输入

{"library":[]
}

预期的 json 输入

{"library":[{"title":"Max"}]
}

【问题讨论】:

  • 请添加应该验证的 JSON 对象和不应该验证的 JSON 对象的示例。问题文本很难理解。

标签: json jsonschema json-schema-validator


【解决方案1】:

我假设您希望“json 输入”失败。

如果是这样,您的问题是您没有描述图书馆的书名缺失,而是您的文档说“我是一个没有书的图书馆”。

JSON 失败:

{"library":[{}]}

或者,如果您想禁止空库:JSON Schema 有一个 minLength 属性。

【讨论】:

    【解决方案2】:

    您的问题有点难以理解,但我注意到您使用的是 items 关键字的元组形式。我确定这不是你想要的。尝试以下架构,我认为它的行为会符合您的预期。

    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "required": ["library"],
      "properties": {
        "library": { 
          "type": "array",
          "items": {
            "required": ["title"],
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "author": {
                "type": "string"
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 1970-01-01
      • 2016-06-20
      • 2023-01-23
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多