我使用JSON模式,该模式应定义具有任意数量按钮的屏幕:
{
"$schema": "http://json-schema.org/draft-03/schema",
"type": "object",
"properties": {
"Screen": {
"type": "object",
"properties": {
"Widgets": {
"type": "array",
"required": true,
"items": {
"$ref": "#/properties/Button"
}
}
}
},
"Button": {
"type": "object",
"properties": {
"title": {
"required": true,
"type": "string"
}
}
}
}
}
这是我验证的JSON:
{
"Screen": {
"Widgets": [
{
"Button": {
"title": "10"
}
}
]
}
}
我使用http://json-schema-validator.herokuapp.com/作为验证器,在这里我收到以下错误:
[ {
"level" : "error",
"schema" : {
"loadingURI" : "#",
"pointer" : "/properties/Button"
},
"instance" : {
"pointer" : "/Screen/Widgets/0"
},
"domain" : "validation",
"keyword" : "properties",
"message" : "missing required property(ies)",
"required" : [ "title" ],
"missing" : [ "title" ]
} ]
必填字段title
报告为缺失,但它位于JSON中。
我假设我在引用Button
时出了问题,但我无法弄清楚如何解决这个问题。
答案 0 :(得分:1)
因为根据您的架构,Widgets数组中的每个元素必须符合#/ properties / Button中定义的架构。 此模式表明每个Button必须是一个Json对象,其中包含一个名为“title”的必需属性。在代码中:
{"title": "10"}
但是你提供了一个名为“Button”的属性的Json对象,这不是你指定的限制。
注意你正在使用Json-schema draft03,你应该看看draft04,虽然这种情况没有区别。
答案 1 :(得分:0)
给定架构的有效JSON是: `
{
"Screen": {
"Widgets": [
{
"title": "10"
}
]
}
}
`