【问题标题】:What is the difference between "required" vs "optional" in JSON SchemaJSON Schema中的“必需”与“可选”有什么区别
【发布时间】:2013-04-18 18:20:50
【问题描述】:

有时,我注意到以下 JSON 架构:

{
    "type": "object",   
    "properties": {
        "address": {
                   "type": "string",
                   "required": true
            }
     }

}

{
    "type": "object",   
    "properties": {
        "address": {
                   "type": "string",
                   "optional": false
            }
     }

}

那么上面例子中requiredoptional有什么区别呢?

【问题讨论】:

  • 注意:这是一个很老的问题,optional 在最新版本的 JSON Schema 中不再存在。默认情况下所有属性都是可选的,required 用于使它们成为必需。

标签: json jsonschema


【解决方案1】:

JSON 模式的IETF draft v4 只定义了required,不包括optional

引用草案 v4 中 required 上的 section

有效值:此关键字的值必须是一个数组。这个数组必须有 至少一个元素。此数组的元素必须是字符串,并且必须是 独一无二。

成功验证的条件:对象实例对此有效 关键字,如果其属性集包含此关键字数组中的所有元素 价值。

实际上,使用required 使所有属性都成为可选 该名称不包含在给定的字符串数组中。

【讨论】:

  • 我不能说为什么,但链接中的 required 似乎是空的。不过链接是正确的
  • @erikb85 在link中,“5.4.3.required”只是一个整体的header;它下面的两个小节详细说明了“必需”关键字的用法。
  • 啊,好吧,看文档还真不清楚。您的格式在我眼中更加清晰。
  • 这个链接有一个例子,更容易理解:spacetelescope.github.io/understanding-json-schema/reference/…
【解决方案2】:

其实它们是等价的表达方式,只是使用了不同版本的标准。

optional 来自 v2,required 来自 v3。您应该确保为您的工具使用正确的工具(尽管理想情况下,如果可以的话,您应该迁移到 v4)。

【讨论】:

    【解决方案3】:

    这意味着对象的address 属性必须具有非undefined 值(如果required)。

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 2012-03-21
      • 2017-02-13
      • 2014-01-15
      • 2020-03-05
      • 2012-03-12
      • 2021-06-10
      • 1970-01-01
      相关资源
      最近更新 更多