如何声明一个属性,该属性可以是一个类型的数组,即字符串,或另一个,即整数?我用Google搜索,我发现的只是一种声明混合类型的方式。
我尝试了以下架构定义:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"content": {
"oneOf": [
{
"type": "array",
"items": [
{
"type": "string"
}
]
},
{
"type": "array",
"items": [
{
"type": "integer"
}
]
}
]
}
},
"type": "object",
"properties": {
"content": {
"$ref": "#/definitions/content"
}
}
}
验证
{
"content": [
1, 2
]
}
和
{
"content": [
"a", "b"
]
}
但也验证了
{
"content": [
1, "a"
]
}
我应该认为无效。
答案 0 :(得分:3)
您使用items
关键字的错误变体。有一个表单采用模式,另一个表单采用模式数组。
架构变体意味着所有元素必须与架构匹配。以下模式定义了一个数组,其中所有值都是字符串。
{
"items": { "type": "string" }
}
模式变体数组描述了一个元组。第一个模式验证第一个项目,第二个模式验证第二个项目,依此类推。以下模式验证一个数组,其中第一个项是整数,第二个是字符串,第三个是布尔值。
{
"items": [
{ "type": "integer" },
{ "type": "string" },
{ "type": "boolean" }
]
}
很少需要items
的元组变体。你几乎总是想要另一个。
答案 1 :(得分:0)
您的架构按顺序显示。我倾向于认为这将是您使用它来验证[1, "a"]
变体的实施中的错误。您是否使用不同的实现对此进行了测试,或者考虑过您在此处尝试的实现提交错误?