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

关于AJV的技术问题:动态设置useDefaults及获取默认JSON

AJV 配置相关问题解答

1. 能否在AJV实例声明完成后,动态或后续设置useDefaults配置?

AJV实例初始化完成后,无法直接动态修改useDefaults配置。该选项属于实例级别的初始化参数,会影响schema编译的核心逻辑,实例创建后官方没有提供修改它的API。如果需要变更该配置,只能重新创建一个新的AJV实例,传入更新后的useDefaults参数。

2. 能否不将useDefaults设为true,仅从属性中配置的所有默认值生成默认JSON?

可以不用创建两个AJV实例,有两种更轻量的可行方案:

  • 方案一:自定义工具函数提取默认值
    直接遍历schema结构,递归提取所有带有default字段的属性,生成默认对象。示例代码:
function getSchemaDefaults(schema) {
  const result = {};
  if (schema.type === 'object' && schema.properties) {
    for (const [key, prop] of Object.entries(schema.properties)) {
      if ('default' in prop) {
        result[key] = prop.default;
      } else if (prop.type === 'object' && prop.properties) {
        result[key] = getSchemaDefaults(prop);
      } else if (prop.type === 'array' && prop.items) {
        result[key] = Array.isArray(prop.items)
          ? prop.items.map(item => getSchemaDefaults(item))
          : getSchemaDefaults(prop.items);
      }
    }
  }
  return result;
}

这个函数可以处理嵌套对象、数组等复杂schema结构,完全独立于AJV的验证逻辑,不会干扰原实例的验证行为。

  • 方案二:利用AJV内部方法(不推荐)
    可以通过AJV编译临时schema验证函数,手动触发默认值填充逻辑,但这种方式依赖AJV的内部实现,可能随版本更新失效,不建议在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:20:40