【问题标题】:JSON Schema throw validation error if invalid optional attribute如果可选属性无效,JSON Schema 会抛出验证错误
【发布时间】:2019-11-26 07:03:26
【问题描述】:

我有一个 json 模式,如下所示,它具有三个可选的属性高度、重量和体积。但我想在这里做以下额外检查:

  1. 如果传递了除身高、体重和体积之外的任何其他属性,则应引发错误

不确定如何实现这一点,因为这些是可选属性。

  {
            "$schema": "http://json-schema.org/draft-04/schema#",
            "type": "object",
            "properties": {
              "options": {
                "type": "object",
                "properties": {
                  "height": {
                    "type": "number"
                  },
                  "weight": {
                    "type": "number"
                  },
                  "volume": {
                    "type": "number"
                  }
               }
             }
            }
          }

【问题讨论】:

  • 获取 properties 对象的键,删除有效的键(我会为此使用集合和集合差异),如果还有任何剩余,则抛出异常

标签: python json validation jsonschema python-jsonschema


【解决方案1】:

您正在寻找的是additionalProperties 键。来自JsonSchema docs

additionalProperties 关键字用于控制额外内容的处理,即名称未在 properties 关键字中列出的属性。默认情况下允许任何其他属性。

所以,你会变成:

 {
            "$schema": "http://json-schema.org/draft-04/schema#",
            "type": "object",
            "properties": {
              "options": {
                "type": "object",
                "properties": {
                  "height": {
                    "type": "number"
                  },
                  "weight": {
                    "type": "number"
                  },
                  "volume": {
                    "type": "number"
                  }
               },
               "additionalProperties": false
             }
            }
          }

据我了解,这是从draft 00开始支持的,所以draft 4应该没问题,但只是为了让你知道,这里是第8版。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2020-02-05
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多