【问题标题】:How can I specify in a json schema that a certain property is mandatory and also must contain a specific value?如何在 json 模式中指定某个属性是必需的并且还必须包含特定值?
【发布时间】:2021-09-02 16:38:00
【问题描述】:

我想为不同的场景创建几个 json 模式。

对于场景 1,我想说明:

a) 属性“draftenabled”的值必须为 true。

b) 属性“draftenabled”确实存在。

我已经查看了这篇文章 Validating Mandatory String values in JSON Schema 并尝试了以下

我试图验证这个 json

{
    "$schema": "./test-schema.json",
    "draftenabled": false,
    "prefix": "hugo"
}

使用我在 Visual Studio Code 中创建的这个架构 test-schema.json。

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "properties": {
        "$schema": {
            "type": "string"
        },
        "draftenabled": {
            "type": "boolean"
        },
        "prefix": {
            "type": "string"
        }
    },
    "additionalItems": false,
    "contains": {
        "properties": {
            "draftenabled": {
                "const": true
            }
        },
        "required": [
            "draftenabled"
        ]
    }
}

我预计会出现错误,因为 draftenabled 的值是 false 而不是 true。

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    在关键字如何应用于不同类型的实例(数据)方面似乎存在一些混淆。

    • properties 仅适用于对象
    • additionalItemscontains 仅适用于数组

    由于您的实例是一个对象,additionalItemscontains 将被忽略。

    根据您对所需内容的描述,我将执行以下操作:

    {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "properties": {
            "$schema": {
                "type": "string"
            },
            "draftenabled": {
                "const": "true"
            },
            "prefix": {
                "type": "string"
            }
        },
        "required": [
            "draftenabled"
        ]
    }
    

    这会将您在contains 中的定义移动到主架构中。你说对了,只是在错误的地方。


    您还提到这是“场景 1”。如果还有其他场景,我建议为每个场景创建这样的模式,然后将它们全部包装在 oneOfanyOf 中:

    {
        "oneOf": [
            { <scenario 1> },
            { <scenario 2> },
            ...
        ]
    }
    

    【讨论】:

    • 你完全正确。我一直在寻找一个应该具有恒定值的对象中的强制属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2018-11-19
    相关资源
    最近更新 更多