[英]JSON Schema - using oneOf inside an items array
我想在我的模式中使用一个数组(项目)。 阵列中的每个对象可以是架构中概述的“框架类型”之一。
我正在开发的架构如下:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [
"Campaign_name",
"Legals"
],
"properties": {
"Campaign_name": {
"type": "string",
"minLength": 3
},
"Legals": {
"type": "object",
"properties": {
"legal-button-label": {
"type": "string",
"minLength": 6
},
"legal-text": {
"type": "string",
"minLength": 15
}
}
},
"Banner_120x600": {
"type": "object",
"properties": {
"serve-backup": {
"type": "object",
"properties": {
"choice": {
"type": "string",
"enum": [
"yes",
"no"
]
},
"image": {
"type": "string",
"pattern": "^([a-zA-Z|-]+)([.])(gif|jpeg|jpg|png)$"
}
}
},
"background": {
"type": "string",
"pattern": "^([a-zA-Z|-]+)([.])(gif|jpeg|jpg|png)$"
},
"logo": {
"type": "string",
"pattern": "^([a-zA-Z|-]+)([.])(gif|jpeg|jpg|png)$"
},
"loop": {
"type": "integer",
"enum": [
0,
1,
2
]
},
"frames": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"items": {
"oneOf": [
{
"$ref": "#/frame-type/INTRO-FRAME"
},
{
"$ref": "#/frame-type/OFFER-FRAME-TYPE-1"
}
]
}
}
}
}
},
"frame-type": {
"INTRO-FRAME": {},
"OFFER-FRAME-TYPE-1": {}
}
}
但是,JSON无法针对架构进行验证。 我正在开发的JSON如下所示:
{
"Campaign_name": "OSM DT DATA",
"Legals": {
"legal-button-label": "Click for Legals",
"legal-text": "Requires 3G/Wi-Fi. Content depends..."
},
"Banner_120x600": {
"serve-backup": {
"choice": "no",
"image": "backup.jpg"
},
"background": "background.png",
"logo": "sky-logo.png",
"loop": 2,
"frames": [
{
"type": "INTRO-FRAME"
},
{
"type": "OFFER-FRAME-TYPE-1"
}
]
}
}
"oneOf": [
{
"$ref": "#/frame-type/INTRO-FRAME"
},
{
"$ref": "#/frame-type/OFFER-FRAME-TYPE-1"
}
]
这两个步骤都是空的,并且如果一个对象匹配多个模式,oneOf将会失败,因为任何文档都匹配一个空模式,所以情况总是如此。 您可以将oneOf更改为anyOf。
"frames": {
"type": "array",
"minItems": 1,
"items": [
{
"type" : "object",
"properties" : {
"type" : { "enum" : ["INTRO-FRAME"] }
}
},
{
"type" : "object",
"properties" : {
"type" : { "enum" : ["OFFER-FRAME-TYPE-1"] }
}
},
{
"type" : "object",
"properties" : {
"type" : { "enum" : ["OFFER-FRAME-TYPE-2"] }
}
},
{
"type" : "object",
"properties" : {
"type" : { "enum" : ["CONTENT-FRAME"] }
}
}
]
}
我删除了对“ oneOf”的使用,并提供了一组对象进行验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.