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

AJV校验含斜杠属性名时错误路径显示~1,如何改为原路径?

解决AJV校验错误信息中斜杠被转义为~1的问题

当对象属性名包含斜杠(/)时,AJV默认会遵循JSON Pointer规范将斜杠转义为~1,导致错误信息里的属性路径显示不符合预期。要让错误信息展示真实的属性路径,可通过以下两种方式处理:

自定义错误格式化函数

AJV提供formatError配置项,允许自定义错误信息的生成逻辑。我们可以在这个函数里把路径中的~1替换回/,还原真实属性名。

示例代码:

const Ajv = require('ajv');
const ajv = new Ajv({
  formatError: (error) => {
    if (error.instancePath) {
      // 全局替换路径中的~1为/
      error.instancePath = error.instancePath.replace(/~1/g, '/');
    }
    return `${error.instancePath} ${error.message}`;
  }
});

// 定义校验Schema
const schema = {
  type: 'object',
  properties: {
    'abc/def': {
      type: 'object',
      properties: {
        a: { type: 'string' },
        c: { type: 'integer' }
      }
    }
  }
};

const validate = ajv.compile(schema);
const data = {
  'abc/def': {
    a: 'b',
    c: 'd'
  }
};

const valid = validate(data);
if (!valid) {
  console.log(validate.errors[0].message); // 输出:/abc/def/c must be integer
}

关闭JSON Pointer转义(需确认版本兼容性)

部分AJV版本支持通过jsonPointers: false配置关闭JSON Pointer的路径转义逻辑,错误信息会直接使用原始属性名生成路径。

示例代码:

const Ajv = require('ajv');
const ajv = new Ajv({ jsonPointers: false });

// 后续Schema定义、校验逻辑与上述示例一致
// 错误信息将直接显示:/abc/def/c must be integer

注意事项

  • 自定义格式化函数的方式兼容性更强,不受AJV版本限制,还能灵活调整错误信息的整体格式
  • 关闭JSON Pointer转义的方式需要确认当前使用的AJV版本是否支持该配置,部分旧版本可能没有此选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:35:00