我有这个模式。它检查评论,并在目前工作良好。
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)有什么帮助吗?
谢谢。
发布于 2015-10-06 09:58:05
解决方案是在一个地方有一个公共定义,然后从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。
https://stackoverflow.com/questions/32966169
复制相似问题