You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:44:48