JSON Schema - 多种类型

时间:2015-10-06 09:18:43

标签: json jsonschema

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

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)

任何帮助?

感谢。

1 个答案:

答案 0 :(得分:3)

解决方案是在一个地方有一个共同的定义,然后从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中使用单个/数组切换器,因此我的文档的模式实际上是http://example.com/schema#/definitions/arrayOrSingle