我必须在这里丢失一些内容,但是下面的JSON并未针对该架构进行验证。 例如,从Java / JavaScript对象获得的required属性永远不会按照架构强制执行。 (仅供参考-每个语言对象都可以具有其他属性或嵌套对象)
但是,如果我完全删除了定义并将它们分别直接放在数组项下面,那么它将验证。
我想使用'definitions'并得到验证。之所以必须将所有对象放入定义中,后来可能不得不将不同语言的对象放在oneOf / allOf中,以便进行其他某些验证检查。
在线检查: Schema and JSON
JSON
make_clone
和架构
{
"languages": [
{
"lang": "Java",
"trainer": "Peter"
},
{
"lang": "JavaScript",
"enrolled": "42",
"available": "5"
}
]
}
固定模式,现在可以使用
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [
"languages"
],
"properties": {
"languages": {
"type": "array",
"minItems": 1,
"items": {
"type": "object"
},
"anyOf": [
{
"$ref": "#/definitions/Java"
},
{
"$ref": "#/definitions/JavaScript"
}
]
}
},
"definitions": {
"Java": {
"required": [
"trainer"
],
"properties": {
"lang": {
"enum": [
"Java"
]
},
"trainer": {
"type": "string"
}
}
},
"JavaScript": {
"required": [
"enrolled",
"available"
],
"properties": {
"lang": {
"enum": [
"JavaScript"
]
},
"enrolled": {
"type": "string"
},
"available": {
"type": "string"
}
}
}
}
}
答案 0 :(得分:1)
我认为“数组”定义不正确。在定义项目类型之后,必须在“项目”中引用可以添加到数组中的对象。像这样:
"languages": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"anyOf": [
{"$ref": "#/definitions/Java"},
{"$ref": "#/definitions/JavaScript"}
]
}
}
答案 1 :(得分:0)
我已经修复了自己
我做了什么:我已将json对象块放置在array的items部分下。