【发布时间】:2019-10-04 17:09:40
【问题描述】:
我一定是在这里遗漏了一些东西,但是下面的 JSON 没有针对架构进行验证。 例如,Java/JavaScript 对象的 required 属性永远不会按照架构强制执行。 (仅供参考 - 每个语言对象都可能有其他属性或嵌套对象)
但是,如果我完全删除定义并直接分别放在数组项下,那么它会验证。
我想使用“定义”并得到验证。我必须将所有对象放在定义中的原因,后来我可能不得不将不同的语言对象放在 oneOf/allOf 中以进行其他某些验证检查。
在线查询: Schema and JSON
JSON
{
"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"
}
}
}
}
}
固定架构,现在可以使用
{
"$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"
}
}
}
}
}
【问题讨论】:
-
看起来作者在 json 中丢失了
-
@VelikiiNehochuha 感谢您的指出。我已经修复了架构。但它仍然不会验证
-
添加了在线链接以查看上述问题中的实际情况
标签: json jsonschema