首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON模式-多种类型

JSON模式-多种类型
EN

Stack Overflow用户
提问于 2015-10-06 09:18:43
回答 1查看 16.4K关注 0票数 9

我有这个模式。它检查评论,并在目前工作良好。

代码语言:javascript
复制
var schema = {
  id: '',
  type: 'object',
  additionalProperties: false,
  properties: {
    text: {
      type: 'string',
      minLength: 1,
      required: true
    },
    author: {
      type: 'number',
      required: true
    }
  }
}; 

我的评论结构是:

代码语言:javascript
复制
{
  text: "Hello world!",
  author: 1
}

但是现在,我需要验证这样的对象数组。这样我就能得到这样的东西:

代码语言:javascript
复制
  [
    {
      text: "Hello world! Im comment #1",
      author: 1
    },
    {
      text: "Super awesome comment #2!",
      author: 0
    }
  ]

有时我只得到一个注释,所以我得到一个对象,并且需要使用第一个模式,但有时我得到了一个注释数组,并且我的模式不适合。

我听说过json模式anyOf,,但我不知道如何实现它。

有些人喜欢:

代码语言:javascript
复制
anyOf  
   schema-1 (object)
   schema-2 (array with objects)

有什么帮助吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 09:58:05

解决方案是在一个地方有一个公共定义,然后从oneOf中的两个不同选项引用该公共定义。

在这里,我们将简单的对象定义放在definitions

代码语言:javascript
复制
{
    "definitions": {
        "singleObject": {
            ... same definition as in your question ...
        }
    }
}

然后在oneOf中引用此模式

代码语言:javascript
复制
{
    "oneOf": [
        {"$ref": "#/definitions/singleObject"}, // plain object
        {
            "type": "array", // array of plain objects
            "items": {"$ref": "#/definitions/singleObject"}
        }
    ],
    "definitions": {
        "singleObject": {...}
    }
}

您可以用几种不同的方式来组织这种情况--我个人常常以简单对象定义作为根模式结束,并且在definitions中有一个/数组开关,所以我的文档的模式实际上是http://example.com/schema#/definitions/arrayOrSingle

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

https://stackoverflow.com/questions/32966169

复制
相关文章

相似问题

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