以下是用于链接说明的JSON模式和JSON,如下所示。
格式: 数组内的个人JSON对象(具有其附加属性,并且可能与数组中的其他对象有所不同)可以是任意3个区域:“ america”,“ asia”和“ europe”,并且至少应使用区域对象的类型在那里。这可以通过数组minItems属性来实现)
问题陈述:
数组中的单个JSON对象可以是任意3个区域:“ america”,“ asia”和“ europe”,并且至少应存在区域对象类型
==>我可以通过将所有区域对象放在anyOf数组中来解决此问题,因为我要匹配至少一个有效区域对象。
JSON对象“ asia”或“ europe”可以与其他区域类型一起存在。两者不能共存。
==>我试图使用'oneOf',但是它通过了ajv验证。实际上,它应该失败。谁能帮忙。谢谢
JSON模式
{
"type": "object",
"properties": {
"stat_data": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {},
"anyOf": [{
"required": ["region"],
"properties": {
"region": {
"enum": ["america"]
},
"country": {
"type": "string"
},
"population": {
"type": "string"
}
}
},
{
"oneOf": [
{
"required": ["region"],
"properties": {
"region": {
"enum": ["asia"]
},
"country": {
"type": "string"
},
"details": {
"type": "object",
"properties": {
"language": {
"type": "string"
},
"tz": {
"type": "string"
}
}
}
}
}, {
"required": ["region"],
"properties": {
"region": {
"enum": ["europe"]
},
"country": {
"type": "string"
},
"language": {
"type": "string"
}
}
}
]
}
]
}
}
}
}
无法同时存在作为“亚洲”和“欧洲”类型对象的JSON对象。
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "asia",
"country": "Japan",
"details": {
"language": "Japanese",
"tz": "utc+9.00"
}
}, {
"region": "europe",
"country": "finland",
"language": "Finnish"
}
]
}
作为“亚洲”类型对象的PASS JSON对象存在。
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "asia",
"country": "Japan",
"details": {
"language": "Japanese",
"tz": "utc+9.00"
}
}
]
}
作为“欧洲”类型对象的PASS JSON对象存在。
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "europe",
"country": "finland",
"language": "Finnish"
}
]
}
答案 0 :(得分:1)
我可以看到您尝试使用这种方法的原因,但是它无法按预期工作,因为您已定义,数组中的每个项目都可能是 string[] source = new string[] {
"|title1|title2|title3|title4|title5|",
"|Word1|Word2|Word3|Word4|Word5|",
};
// {
// {"title1", "title2", "title3", "title4", "title5"},
// { "Word1", "Word2", "Word3", "Word4", "Word5"}
// }
string[,] array = SplitArrays(source);
或(america
或{{ 1}}),这不是您想要的。
请记住,europe
将值模式应用于数组中的EACH元素。它对整个数组本身没有任何约束。 asia
检查数组中的至少一项是否针对其值架构进行了验证。
您要说的是,数组中的每个项目都可能具有items
或contains
或america
,但是如果数组包含{ {1}},以及反之。
我已经重构了架构并进行了一些更改。
希望您还可以看到使用europe
>>(asia
和europe
> asia
)的意图很明显。
JSON模式通过添加约束来工作。通常,您不能通过遗漏来定义约束。
JSON Schema and data validation demo
oneOf