这是我的json模式。我想要一个递归的树状结构。但是,即使我在所需的数组中有无效的对象,响应也会通过。
{
"$schema":"http://json-schema.org/draft-03/schema",
"properties":{
"Result":{
"type":"object",
"properties":{
"Children":{
"$ref":"#/definitions/Node"
}
},
"required":true
}
},
"required":true,
"type":"object",
"definitions":{
"Node":{
"type":"array",
"Items":{
"type":"object",
"properties":{
"Children":{
"$ref":"#/definitions/Node"
}
},
"required":true
}
}
}
}
要检查JSON模式验证是否正确验证,我特意在响应中放入了无效对象-
{"Result":{"title":"title","Children":[{"invalidobject":"invalidobject"}]}}
但是它正在通过-https://www.jsonschemavalidator.net/ 我真正想要的是Children也要有一系列Children等。因此,只有具有对象属性(标题和子级)的子级才应允许。 它也通过了此响应-
{"Result":{"title":"title","Children":[{"title":45}]}}
答案 0 :(得分:0)
尝试此架构。请注意,即使在第一级,此架构也将允许子数组为空。在第一级之后,必须允许子数组为空,否则,架构将需要无限递归数据才能通过验证。
{
"$schema": "http://json-schema.org/draft-03/schema",
"type": "object",
"properties": {
"Result": {
"$ref": "#/definitions/node",
"required":true,
}
},
"definitions": {
"node": {
"type": "object",
"properties": {
"title": {
"type": "string",
"required": true
},
"Children": {
"type": "array",
"required": true,
"items": {
"$ref": "#/definitions/node"
}
}
},
"additionalProperties": false
}
}
}
如果不想让子级数组在第一级为空,请尝试像这样单独定义第一级。
{
"$schema": "http://json-schema.org/draft-03/schema",
"type": "object",
"properties": {
"Result": {
"type": "object",
"required": true,
"properties": {
"title": {
"$ref": "#/definitions/title"
},
"Children": {
"minItems": 1,
"$ref": "#/definitions/Children"
}
},
"additionalProperties": false
}
},
"definitions": {
"title": {
"type": "string",
"required": true
},
"Children": {
"type": "array",
"required": true,
"items": {
"$ref": "#/definitions/node"
}
},
"node": {
"type": "object",
"properties": {
"title": {
"$ref": "#/definitions/title"
},
"Children": {
"$ref": "#/definitions/Children"
}
},
"additionalProperties": false
}
}
}
这里是从https://www.jsonschemavalidator.net/验证的示例输入JSON的验证结果
输入JSON:
{
"Result": {
"title": "title",
"Children": [
{
"invalidobject": "invalidobject"
}
]
}
}
验证结果:
消息: 尚未定义属性“ invalidobject”,并且该架构不允许使用其他属性。 架构路径: #/ definitions / node / additionalProperties
消息: 对象缺少必需的属性:title,Children。 架构路径: #/ definitions / node /必填
内置JSON:
{
"Result": {
"title": "title",
"Children": [
{
"title": 45
}
]
}
}
验证结果:
消息: 类型无效。预期为String,但得到了Integer。 架构路径: #/ definitions / node / properties / title / type
消息: 对象:子级缺少必需的属性。 架构路径: #/ definitions / node /必填