JSON 架构 - 多种类型

JSON Schema - multiple types

我有这个架构。它检查评论,目前工作正常。

var schema = {
  id: '',
  type: 'object',
  additionalProperties: false,
  properties: {
    text: {
      type: 'string',
      minLength: 1,
      required: true
    },
    author: {
      type: 'number',
      required: true
    }
  }
}; 

我的评论结构是:

{
  text: "Hello world!",
  author: 1
}

但是现在,我需要像这样验证一组对象。所以我可以得到类似的东西:

  [
    {
      text: "Hello world! Im comment #1",
      author: 1
    },
    {
      text: "Super awesome comment #2!",
      author: 0
    }
  ]

有时我只得到一条评论,所以我得到一个对象,需要使用第一个模式,但有时我得到一系列评论,我的模式不适合。

我听说过 json 架构 anyOf,但我不知道该怎么做。

有些喜欢:

anyOf  
   schema-1 (object)
   schema-2 (array with objects)

有什么帮助吗?

谢谢。

解决方案是在一个地方有一个通用定义,然后从 oneOf:

中的两个不同选项中引用该通用定义

这里,我们把简单的对象定义放在里面definitions:

{
    "definitions": {
        "singleObject": {
            ... same definition as in your question ...
        }
    }
}

然后我们在 oneOf:

中引用这个模式
{
    "oneOf": [
        {"$ref": "#/definitions/singleObject"}, // plain object
        {
            "type": "array", // array of plain objects
            "items": {"$ref": "#/definitions/singleObject"}
        }
    ],
    "definitions": {
        "singleObject": {...}
    }
}

您可以用几种不同的方式来组织它 - 我个人经常以简单对象定义作为根架构,并在 definitions 中使用 single/array 切换器,因此架构我的文档实际上是 http://example.com/schema#/definitions/arrayOrSingle.