JSON架构枚举不影响验证

时间:2020-03-18 21:44:55

标签: json jsonschema json-schema-validator

我在嵌套对象中定义了一个子模式,并且无法使枚举约束起作用。看到这里....

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "Top level": {
            "type": "object",
            "properties": {
                "State": {
                    "type": "object",
                    "description": "stuff",
                    "properties": {
                        "Value": {
                            "type": "string",
                            "enum:": [
                                "A",
                                "B",
                                "C"
                            ]
                        },
                        "readOnly": true
                    },
                    "required": [
                        "Value"
                    ]
                }
            },
            "required": [
                "State"
            ]
        }
    },
    "required": [
        "Top level"
    ]
}

这应该会失败,但是会通过验证。在下面...

{
    "Top level": {
        "State": {
            "Value": "not supposed to validate but does anyway"
        }
    }
}

奇怪的是,这种模式似乎可以工作并阻止不希望的字符串,但是它没有更深的子模式结构...

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "Value": {
            "type": "string",
            "enum": [
                "A",
                "B",
                "C"
            ]
        }
    }
}

此示例正确被拒绝...

{
    "Value": "D"
}

我在做什么错?它必须是嵌套对象的基础知识。我知道是否更改了值名称,在第一个示例中它会在验证过程中检测到它丢失并被拒绝...为什么它不检测到无效的枚举字符串?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

由于某种原因,这真的很难发现。我以为我也疯了。您那里还有一个:

"enum:": [
     ^
相关问题