如何编写YAML校验Schema以支持vocals字段为字符串或字符串列表两种格式
如何编写YAML校验Schema以支持vocals字段为字符串或字符串列表两种格式
嘿,这个问题其实用JSON Schema里的anyOf关键字就能轻松解决啦!你之前的思路完全没问题,只是没找对正确的用法——anyOf是可以直接放在属性的定义里,让字段匹配多种类型规则的。
下面是能同时兼容两种场景的完整Schema:
{ "type": "object", "properties": { "who": { "type": "object", "properties": { "vocals": { "anyOf": [ // 匹配单个字符串的情况 { "type": "string" }, // 匹配字符串数组的情况(带去重校验) { "type": "array", "uniqueItems": true, "items": { "type": "string" } } ] } }, "required": ["vocals"] } }, "required": ["who"] }
简单解释下:
vocals字段通过anyOf声明了两个合法的规则分支,只要满足其中一个就会校验通过- 第一个分支对应你需要的单个字符串场景,第二个分支对应去重的字符串数组场景
你可以用这两个测试用例验证:
单个字符串的YAML(合法):
who: vocals: roger
字符串数组的YAML(合法):
who: vocals: - roger - pete
另外补充一句:如果想要更严格的校验(确保字段只能是其中一种类型,不过这里字符串和数组本身不会重叠,所以效果一致),也可以把anyOf换成oneOf,但anyOf在这个场景下语义更准确——只要符合任一规则就合法。
备注:内容来源于stack exchange,提问作者chazlarson
相关产品推荐
相关产品推荐

