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

Ajv v8.6.3严格模式报unknown keyword: "$schema"错误如何解决

问题原因
  • Ajv v8.x版本默认开启严格模式,严格模式会主动校验Schema中使用的所有关键字是否被当前Ajv实例的规则集覆盖。$schema属于JSON Schema的元声明关键字,不属于普通数据校验关键字,默认不会被识别为合法校验关键字,因此严格模式下抛出未知关键字错误。
  • 你调用的ajv.compileParser方法为快速解析专用API,本身不会自动处理Schema根节点的$schema元声明,即便你手动添加了draft7元Schema,也不会自动将$schema加入合法关键字列表。
解决方案

你可以根据自己的业务场景选择以下任意一种方案解决:

方案1:显式配置Ajv允许$schema关键字(最推荐,不影响其他严格模式安全校验规则)

初始化Ajv的时候传入keywords配置,将$schema加入合法关键字列表即可:

const ajv = new Ajv({
  keywords: ["$schema"]
})

ajv.addMetaSchema(draft7MetaSchema)
ajv.compileParser(mySchema)

方案2:关闭针对性严格校验规则

如果不需要严格模式的Schema结构校验,可以针对性关闭对应规则,无需关闭全部严格模式:

const ajv = new Ajv({
  strictSchema: false // 仅关闭Schema结构的严格校验,保留其余严格模式规则
})

// 完全关闭严格模式(不推荐,会丢失所有严格模式的安全校验能力)
// const ajv = new Ajv({ strict: false })

ajv.addMetaSchema(draft7MetaSchema)
ajv.compileParser(mySchema)

方案3:移除业务Schema中的$schema字段

你已经手动为Ajv实例添加了draft7元Schema,无需在业务Schema中额外声明$schema元字段,直接删除该字段即可解决报错:

export const mySchema ={
    "properties": {
        "names": {
            "items": {
                "type": "number"
            },
            "type": "array"
        }
    },
    "type": "object"
}

const ajv = new Ajv()
ajv.addMetaSchema(draft7MetaSchema)
ajv.compileParser(mySchema)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:04