我有这个架构。它检查评论,目前工作正常。
var schema = {
id: '',
type: 'object',
additionalProperties: false,
properties: {
text: {
type: 'string',
minLength: 1,
required: true
},
author: {
type: 'number',
required: true
}
}
};
Run Code Online (Sandbox Code Playgroud)
我的评论结构是:
{
text: "Hello world!",
author: 1
}
Run Code Online (Sandbox Code Playgroud)
但是现在,我需要验证这样的对象数组。所以我可以得到类似的东西:
[
{
text: "Hello world! Im comment #1",
author: 1
},
{
text: "Super awesome comment #2!",
author: 0
}
]
Run Code Online (Sandbox Code Playgroud)
有时我只得到一个评论,所以我得到一个对象,并且需要使用第一个模式,但有时我得到一组评论,我的模式不适合。
我听说过 json schema anyOf,但我不知道该怎么做。
有些人喜欢:
anyOf
schema-1 (object)
schema-2 (array with objects)
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
谢谢。
解决方案是在一个地方有一个通用定义,然后从内部的两个不同选项中引用该通用定义oneOf:
在这里,我们将简单的对象定义放在里面definitions:
{
"definitions": {
"singleObject": {
... same definition as in your question ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们在里面引用这个模式oneOf:
{
"oneOf": [
{"$ref": "#/definitions/singleObject"}, // plain object
{
"type": "array", // array of plain objects
"items": {"$ref": "#/definitions/singleObject"}
}
],
"definitions": {
"singleObject": {...}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以组织这几个不同的方式-我个人经常结束与简单对象定义为根架构,并且具有在单/阵列切换器definitions,所以对于我的文档的架构实际上是http://example.com/schema#/definitions/arrayOrSingle。
| 归档时间: |
|
| 查看次数: |
11226 次 |
| 最近记录: |