【问题标题】:JSON-Schema draft-04 - OneOf with requiredJSON-Schema Draft-04 - OneOf 需要
【发布时间】:2017-06-24 16:59:46
【问题描述】:

我有一个 API 路由在处理逻辑之前验证 json 架构。

此路由可以根据发送的 JSON 创建 2 种类型的“文章”。我使用 OneOf 检查架构是否对应于这两种类型之一。

{
    "type": "object",
    "oneOf": [{
        "properties": {
            "name": {
                "type": "string",
            },
            "description": {
                "type": "string"
            }
        }
    }, {
        "properties": {
            "author": {
                "type": "string",
            },
            "editor": {
                "type": "string"
            }
        },
        "required":["author", "editor"]
    }]
} 

  • 所以第一个类型可以有名称和描述,但是这个字段不是必需的。

  • 第二种类型需要有作者编辑

如果发送的 JSON 架构仅包含 author 字段会怎样? (编辑器为空)

感谢您的回复。

【问题讨论】:

    标签: javascript json api validation schema


    【解决方案1】:

    根据oneOf关键字的定义

    要针对 oneOf 进行验证,给定的数据必须针对 正是给定的子模式之一。

    在定义架构的方式中,仅包含“作者”属性的对象将始终有效,因为第一个 oneOf 定义可以翻译为:

    具有任何一组属性的对象都是有效的,但如果对象包含“名称”和“描述”属性,则它们必须都是字符串类型。

    如您所见,仅包含“作者”属性的对象完全符合此定义。

    实际上,如果给定对象包含“名称”和/或“描述”属性并且它们不是字符串,则任何给定对象将仅针对第二个 oneOf 定义(作者、编辑者)进行验证。

    这是学习JSON Schema的好参考https://spacetelescope.github.io/understanding-json-schema/

    这是一个很好的 JSON Schema 验证器http://www.jsonschemavalidator.net

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2017-07-18
      • 2015-06-18
      • 2014-03-01
      • 1970-01-01
      • 2015-06-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多