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
.
我有这个架构。它检查评论,目前工作正常。
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
.