当前位置: 首页 > 知识库问答 >
问题:

仅允许在JSON模式中声明的属性

孙海
2023-03-14

我使用json-schema,并希望只允许在此文件中声明的属性通过验证。例如,如果用户在他们的json对象中传递一个“名称”属性,它将失败这个模式,因为“名称”在这里没有作为属性列出。

是否有一些类似于“必需”的功能只允许列出的属性通过?

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
    "itemNumber": {
        "type":"string",
        "minimum": 3
    },
    "title": {
        "type":"string",
        "minimum": 5
    },
    "description": {
        "type":"string",
        "minimum": 5
    }
},
"required": [
    "itemNumber",
    "title",
    "description"
]
}

共有3个答案

酆景辉
2023-03-14

在您的定义中提供:

  • “必填”中的所有必填字段:[]
  • 并设置“附加属性”:false

演示:

鲜于光赫
2023-03-14

仅供参考-标准的v5似乎将描述“禁止未知属性”验证模式。

因此,您可以简单地指示验证器将未知属性标记为错误,而不是将此需求作为格式的一部分(正如Chris Pitman在评论中所说,这会损害未来的可扩展性)。所以,它就像一个超级严格的验证模式,对开发人员很有用。

一些验证器已经支持这一点(例如tv4):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

使用此工具,如果数据可能具有循环引用,则应使用checkRecursive,并且banUnknownProperties将完全执行您想要的操作,而无需使用“additionalProperties”:false

谷梁鸣
2023-03-14

我相信您需要做的是将additionalProperties设置为false。请参见此处的规格说明

 类似资料:
  • 假设我有类似的模式 这些都不是必需的。用户可以向我发送上述任何属性,但没有其他未声明的属性。他们可以传给我,和或全部。但是如果他们向我传递了所有属性和附加属性,如,则应拒绝该消息。 我如何定义这样的模式?

  • 问题内容: 我有一个内部类,用于存储用于游戏的控件的信息,现在我想在其中存储一个静态ArrayList,其中包含控件的所有名称。但我收到此错误:“仅在常量变量声明中允许使用修饰符静态” 现在,我知道可以通过将ArrayList移出类并将其存储在主类中来轻松解决。但是我宁愿将所有信息都放在一个类中,以便我可以访问所有内容。 “ Control.key,Control.trigger,Control.

  • 问题内容: 我想使用数据库模型为我的项目控制一些配置设置。例如: 此模型应该只有一个实例: 当然,如果有人不小心创建了一个新实例,那就不是世界末日了。我可以做。但是,是否有一种方法可以将其锁定,从而无法创建多个实例? 鉴于Django从那时起发生了很大变化,是否有解决此问题的标准方法?还是我应该只使用并接受可能重复的内容? 问题答案: 您可以重写方法以控制实例数:

  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 由于 Vue 不允许动态添加根级响应式属性,所以你必须在初始化实例前声明根级响应式属性,哪怕只是一个空值: var vm = new Vue({ data: { // 声明 message 为一个空值字符串 message: '' }, template: '<div>{{ message }}</div>' }) // 之后设置 `message` vm.messa

  • 我有一个正则表达式,允许一个大小写,一个小写,8-16个字符和大多数特殊字符,包括空间。我想在正则表达式中添加允许空间。 我曾经尝试过: > 正则表达式中的空格 Regex允许字母数字、空格和一些特殊字符 Java空间和换行正则表达式 我的正则表达式如下: 我只想在这里加一点空间。我试过和