我正在尝试进入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对象的结构,但是有可能验证更深层对象中的对象值数据,还是我需要执行检查其他地方?
答案 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"
}
答案 1 :(得分:0)
JSON Schema目前无法实现这一目标(草案7)。
官方规格repo github上提出了一个问题:https://github.com/json-schema-org/json-schema-spec/issues/538
如果你(或任何读过这篇文章的人)真的想要这个,请竖起第一期评论。
它目前不太可能进入下一个草案,即使它确实如此,实施它的时间可能会很慢。
在JSON模式验证过程之后,您需要进行此验证。