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

使用Ajv验证数组类型时枚举验证失败,值符合要求却报错

问题原因与解决方案

你当前的错误是因为把enum配置在了bass数组的顶层属性中,这会让Ajv验证整个bass数组是否等于枚举列表里的某一个字符串值(比如要求bass是"MTD"而不是["MTD"]),但你的数据是数组类型,所以触发了"this must be equal to one of the allowed values"错误。

正确的做法是把enum移到items对象里,用来限制数组中的每个元素必须属于指定的枚举范围:

const Ajv = require("ajv");
const ajv = new Ajv();

const schema = {
  type: "object",
  properties: {
    count: { type: "integer" },
    name: { type: "string" },
    bass: {
      type: "array",
      items: {
        type: "string",
        enum: ["Ambush Custom Bass", "MTD", "Ken Smith", "Sadowsky"], // 移到此处限制数组元素
      },
    },
  },
  required: ["count"],
};

const validate = ajv.compile(schema);

const data = {
  count: 1,
  name: "Andy",
  bass: ["MTD"],
};

const valid = validate(data);

console.log("valid: ", valid); // 现在会输出true

if (!valid) console.log(validate.errors);

这样配置后,Ajv会验证bass数组的每个元素都是枚举列表中的合法字符串,同时保证bass本身是数组类型,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者andyengle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:13:21