首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON模式OneOf级联

JSON模式OneOf级联
EN

Stack Overflow用户
提问于 2019-05-13 12:06:49
回答 1查看 733关注 0票数 2

我要问自己的是,我是否可以级联多个'oneOf‘,或者有更好的方法使我的案例有效。

我试图验证以下几点:

将ObjectA或ObjectB定义为单个对象或数组

案例1:

只使用ObjectA的定义

代码语言:javascript
复制
{
 "X": "test"
}

案例2:

只使用ObjectB的定义

代码语言:javascript
复制
{
 "Y": "test"
}

案例3:

在数组中使用ObjectA或ObjectB的定义

代码语言:javascript
复制
[
 {
  "X": "test"
 },
 {
  "Y": "test"
 }
]

案例4:

在数组中使用ObjectA的两次定义

代码语言:javascript
复制
[
 {
  "X": "test"
 },
 {
  "X": "test"
 }
]

模式:

我尝试使用这个模式,IntelliSense of MonacoEditor运行良好,但我仍然得到错误/警告:“匹配多个模式,而只有一个必须进行验证。”

代码语言:javascript
复制
{
 "definitions": {
  "objectA": {
  "type": "object",
  "properties": {
   "X": {
    type: "string"
   }
  }
 },
  "objectB": {
   "type": "object",
   "properties": {
    "Y": {
     type: "string"
    }
   }
  }
 },
 "oneOf":
  [
   {
    "oneOf":
     [
      {
       "$ref": "#definitions/objectA"
      },
      {
       "$ref": "#definitions/objectB"
      }
     ]
    },
    {
     "type": "array",
     "items": 
      {
       "oneOf":
        [
         {
          "$ref": "#definitions/objectA"
         },
         {
          "$ref": "#definitions/objectB"
         }
        ]        
      }
    }
  ]
}

错误/警告:

“当只有一个必须验证时,匹配多个架构。”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 13:14:12

问题是您在objectA和Y属性en objectB中的X属性是不需要的,因此一个空对象(即{ } )将对这两个属性进行验证。

此外,如果要使用objectA和objectY的数组有效,则需要使用anyOf而不是oneOf。

代码语言:javascript
复制
{
 "definitions": {
   "objectA": {
     "type": "object",
     "properties": {
       "X": {
         "type": "string"
       }
     },
     "required": ["X"]
   },
   "objectB": {
     "type": "object",
     "properties": {
       "Y": {
         "type": "string"
       }
     },
     "required": ["Y"]
   }
 },
 "oneOf":
  [
   {"$ref": "#/definitions/objectA"},
   {"$ref": "#/definitions/objectB"},
   {
     "type": "array",
     "minItems": 1,
     "items":
     {
       "anyOf":
       [
         {"$ref": "#/definitions/objectA"},
         {"$ref": "#/definitions/objectB"}
       ]        
     }
   }
  ]
}

如果不想要一个空数组来验证,我添加了minItems。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56112003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档