JSON 模式更深层次的对象唯一性

iLu*_*gix 5 arrays json unique jsonschema

我正在尝试了解JSON 模式定义,并想了解如何在模式定义中实现更深层次的对象唯一性。请看下面的示例定义,在本例中是一个模块的简单 IO。

{
    "$schema": "http://json-schema.org/draft-06/schema#",
    "type": "object",
    "required": ["modulIOs"],
    "properties": {
        "modulIOs": {
            "type": "array",
            "uniqueItems": true,
            "items": {
                "allOf": [
                    {
                    "type": "object",
                    "required": ["ioPosition","ioType","ioFunction"],
                    "additionalProperties": false,
                    "properties": {
                        "ioPosition": {
                            "type": "integer"
                        },
                        "ioType": {
                            "type":"string",
                            "enum": ["in","out"]
                        },   
                        "ioFunction": {
                            "type":"string"
                        }
                    }
                }
            ]
        }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用 iE Draft-06验证以下内容时,我得到了肯定的验证。

{"modulIOs":
    [
          {
            "ioPosition":1,
            "ioType":"in",
            "ioFunction":"240 V AC in"
        },
        {
            "ioPosition":1,
            "ioType":"in",
            "ioFunction":"24 V DC in"
        }
    ]
} 
Run Code Online (Sandbox Code Playgroud)

我知道验证是成功的,因为验证器做了他想要做的事情 - 它检查 JSON 对象的结构,但是是否有可能验证更深层次对象中的对象值数据,或者我是否需要在其他地方执行检查?

Rel*_*ual 6

目前,这对于 JSON Schema(草案 7)来说是不可能的。

官方规范存储库 github 上提出了一个问题: https: //github.com/json-schema-org/json-schema-spec/issues/538

如果您(或阅读本文的任何人)确实想要这个,请点赞第一期评论。

目前它不太可能进入下一个草案,即使它进入了,实施它的时间也可能很慢。

您需要在 JSON 架构验证过程之后执行此验证。