我有这个架构。它检查评论,目前工作正常。
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)
任何帮助?
感谢。
答案 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
。