我正在研究像这样的json架构:
{
"$schema": "http://json-schema.org/schema#",
"title": "Layout",
"description": "The layout created by the user",
"type": "object",
"definitions": {
"stdAttribute": {
"type": "object",
"required": ["attributeName","attributeValue"],
"properties": {
"attributeValue": {
"type": "string"
},
"attributeName": {
"type": "string"
}
}
},
"stdItem": {
"type": "object",
"required" : ["stdType","stdAttributes"],
"properties": {
"stdType": {
"enum": [
"CONTAINER",
"TEXT",
"TEXTAREA",
"BUTTON",
"LABEL",
"IMAGE",
"MARCIMAGE",
"DATA",
"SELECT",
"TABLE"
]
},
"stdAttributes": {
"type": "array",
"items": {
"$ref": "#/definitions/stdAttribute"
},
"minItems": 1
},
"children": {
"type": "array",
"items": {
"$ref": "#/definitions/stdItem"
}
}
}
}
},
"properties":{
"stdItem":{ "$ref": "#/definitions/stdItem" }
}
}
我尝试使用上述方案验证以下json:
{
"stdItem": {
"stdType": "CONTAINER",
"stdAttributes": [
{
"attributeName": "ola",
"attributeValue": "teste"
}
],
"children": [
{
"stdItem": {
"stdType": "TEXT",
"stdAttributes": [
{
"attributeName": "ola",
"attributeValue": "teste"
}
],
"children": []
}
}
]
}
}
我收到错误,告诉我路径stdItem / children / 0缺少必需属性 stdType 和 stdAttributes 。正如您所看到的那样,它们并没有丢失。
我试图更改属性的顺序,但仍然无法正常工作。我一直收到以下错误:
--- BEGIN MESSAGES ---错误:对象缺少必需的属性([" stdAttributes"," stdType"]) 级别:"错误" schema:{" loadingURI":"#","指针":" / definitions / stdItem"} 实例:{"指针":" / stdItem / children / 0"} 域名:"验证" 关键字:"必需" 必需:[" stdAttributes"," stdType"] 缺少:[" stdAttributes"," stdType"] ---结束消息---
有人能指出我做错了吗?
答案 0 :(得分:2)
当你宣布"孩子"你说的财产是一个" stdItem" ,所以它期望有stdAttributes和stdType属性。相反,你在json中拥有的是一个" stdItem"属于stdItem类型的属性。 因此,您缺少架构中该属性(stdItem)的声明。
此架构将验证您的json:
{
"$schema": "http://json-schema.org/schema#",
"title": "Layout",
"description": "The layout created by the user",
"type": "object",
"definitions": {
"stdAttribute": {
"type": "object",
"required": ["attributeName","attributeValue"],
"properties": {
"attributeValue": {
"type": "string"
},
"attributeName": {
"type": "string"
}
}
},
"stdItem": {
"type": "object",
"required" : ["stdType","stdAttributes"],
"properties": {
"stdType": {
"enum": [
"CONTAINER",
"TEXT",
"TEXTAREA",
"BUTTON",
"LABEL",
"IMAGE",
"MARCIMAGE",
"DATA",
"SELECT",
"TABLE"
]
},
"stdAttributes": {
"type": "array",
"items": {
"$ref": "#/definitions/stdAttribute"
},
"minItems": 1
},
"children": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stdItem": { "$ref": "#/definitions/stdItem" }
}
}
}
}
}
},
"properties":{
"stdItem": { "$ref": "#/definitions/stdItem" }
}
}
请注意,我已将对象添加到" children"的项规范中。有一个" stdItem"属性。 (我没有按要求声明它,但你可能想添加它)