【问题标题】:JSON schema - new sub schema based on a propertyJSON 模式 - 基于属性的新子模式
【发布时间】:2020-11-24 10:48:40
【问题描述】:

我想要一个可以包含 3 个字段的 JSON 模式:numkey1key2numkey1 都是必填字段。仅当为key1 提供了'abc' 值时,字段key2 才是强制性的。这是我创建的架构:

schema = {
    type: 'object',
    additionalProperties: false,
    properties: {
        num: {
            type: 'number',
            minimum: 1,
            maximum: 5
        },
        key1: {
            type: 'string',
            enum: ['abc', 'def']
        }
    },
    required: ['num', 'key1'],
    if: {
        properties: {
            key1: {
                const: 'abc'
            }
        }
    },
    then: {
        properties: {
            key2: {
                type: 'string',
                required: true
            }
        }
    }
};

这是我想使用 npm 模块 jsonscehma ("jsonschema": "^1.2.0") 对 schema 进行验证的 instance

instance = {
    num: 1,
    key1: 'abc'
};

var Validator = require('jsonschema').Validator;
var v = new Validator();

console.log(v.validate(instance, schema));

我的期望是,由于key1 的值是'abc',理想情况下这应该抛出一个错误提示

缺少必填字段“key2”

但是,这种情况下没有这样的错误。

另外,如果我在实例中提供key2,我会得到

additionalProperty "key2" 在不允许的情况下存在于实例中

尽管key1'abc'

如果我在这里遗漏了什么,请说明。

【问题讨论】:

    标签: javascript node.js jsonschema


    【解决方案1】:

    您使用的库仅支持规范的draft-04。

    if / then / else 直到 07 草案才添加。

    【讨论】:

    • 哪个版本是'draft-07'?
    • jsonschema 是一个 npm 包。看起来它只支持一些draft-04。如果你想要draft-07 支持,你需要寻找一个新的库。
    • @SreekarMouli 如果你被draft-04 卡住了,你可以使用暗示模式来获得与if/thenstackoverflow.com/questions/38717933/… 相同的行为。但是,您最好选择支持更新草稿的不同 JSON Schema 实现。两个选项是 ajv 和 hyperjump/json-schema。
    猜你喜欢
    • 2019-09-14
    • 2016-08-06
    • 2021-10-26
    • 2017-04-26
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多