【问题标题】:How to handle default values of sub-objects within a JSON schema validation?如何在 JSON 模式验证中处理子对象的默认值?
【发布时间】:2016-12-19 22:12:02
【问题描述】:

JSON 模式验证器应如何处理对象的子对象具有默认值但父对象没有默认值的情况?

想象一下下面的架构

{
    "type": "object",
    "properties": {
        "element": {
           "type": "object",
           "properties": {
               "number" : { "type": "integer", "default": 15 }
           }
        }
    }
}

针对以下 JSON 进行了验证:{} 生成 {}

但它不应该导致

{
    "element": {
        "number": 15
    }
}

.

我们必须如何解释default-关键字?我阅读了标准中的相应行,但它们并没有进一步帮助我。

【问题讨论】:

标签: json jsonschema json-schema-validator json-schema-defaults


【解决方案1】:

验证实例的行为只返回“有效”或“无效”。 JSON Schema 验证不会以任何方式更改实例,或“导致”新实例。

“default”是一个相当通用的元数据关键字,它可以(并且被允许)对不同的人意味着不同的东西。这并不一定意味着您可以在值不存在时填写它们。这确实意味着,至少,您可以在决定创建它时假设一个初始值。

与“标题”和“描述”一样,“默认”关键字主要针对用户界面。

【讨论】:

  • 默认值在我的情况下似乎很有用(配置文件)。如果缺少的元素具有默认值,还可以进行验证填充。你在哪里读到验证器不应该修改实例?
  • 验证器可以具有附加功能,包括根据某些规则修改实例。但是验证本身只需要返回有效/无效(大多数验证器也会返回要纠正的问题列表)。
【解决方案2】:

好问题..

但是有一个简单的解决方案。您可以使用 enum 关键字作为默认值。请参阅下面的示例,可以为您提供它的快照

  filterType: {
            type: 'String',
            required: true,
            enum: ["Accounts", "portfolios"]
        }

所以该字段应该包含这两个值中的任何一个......我认为这对你有用......

【讨论】:

  • required,如果存在,则必须是数组,根据规范草案4。 json-schema.org/latest/…
  • required 关键字用于必须在 json 中指定字段。意思是,必须为设置为 required : true 的字段指定值
  • 您参考的是哪个模式规范?
  • 不,它不符合我引用的规范。必需的必须是一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2017-07-23
相关资源
最近更新 更多