繁体   English   中英

JSON模式-在items数组中使用oneOf

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM