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

时间:2018-06-01 09:45:33

标签: arrays json unique jsonschema

我正在尝试进入JSON schema definitions,并希望了解如何在架构定义中实现更深层次的对象唯一性。请查看以下示例定义,在本例中是模块的简单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"
                        }
                    }
                }
            ]
        }
        }
    }
}

当{i validate以下i.E. draft-06我得到了肯定的验证。

{"modulIOs":
    [
          {
            "ioPosition":1,
            "ioType":"in",
            "ioFunction":"240 V AC in"
        },
        {
            "ioPosition":1,
            "ioType":"in",
            "ioFunction":"24 V DC in"
        }
    ]
} 

我知道验证是成功的,因为验证器完成了他的意图 - 它检查JSON对象的结构,但是有可能验证更深层对象中的对象值数据,还是我需要执行检查其他地方?

2 个答案:

答案 0 :(得分:0)

您可以使用JSON模式验证来验证对象字段的数据值。 例如,如果您需要检查 ioPosition 是否在0到100之间,您可以使用:

"ioPosition": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }

如果您需要验证 ioFunction 字段,您可以使用regualr表达式,例如:

 "ioFunction": {
            "type": "string",
            "pattern": "^[0-9]+ V [A,D]C"
          }

看看json-schema-validation

答案 1 :(得分:0)

JSON Schema目前无法实现这一目标(草案7)。

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

如果你(或任何读过这篇文章的人)真的想要这个,请竖起第一期评论。

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

在JSON模式验证过程之后,您需要进行此验证。