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

使用jsonschema校验CycloneDX schema报hashes定义重复错误

问题原因
  • 你使用的Node.js jsonschema 库对递归引用的JSON Schema兼容处理存在缺陷:CycloneDX 1.3 schema内部存在多处递归$ref引用,库在解析这些引用时会重复尝试注册#/properties/hashes片段,检测到定义冲突就抛出对应报错。
  • 在线校验工具大多采用兼容性更好的Schema解析实现,对递归引用、重复片段的处理逻辑更完善,因此不会触发报错。
解决方法

方案1(推荐):替换为Ajv校验库

Ajv是目前Node.js生态兼容性最好、性能最优的JSON Schema校验库,完美支持CycloneDX schema的语法规则。
修改后的代码示例:

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

const sbombJson = process.argv[3];
const testJson = process.argv[4];

const jsonSchemaValidator =(schema,test) =>{
  const validate = ajv.compile(schema);
  const valid = validate(test);
  if (!valid) console.log(validate.errors);
}

const sbombSchema =  JSON.parse(fs.readFileSync(sbombJson,'utf8'));
const test =  JSON.parse(fs.readFileSync(testJson,'utf8'));

jsonSchemaValidator(sbombSchema,test);

执行前先安装依赖:npm install ajv

方案2:继续使用jsonschema库,添加覆盖配置

在校验方法中添加rewrite: true参数,允许库覆盖重复的schema缓存定义,即可规避冲突报错:

const jsonSchemaValitaor =(schema,test) =>{
  // 新增rewrite参数允许覆盖已缓存的schema定义
  console.log(validator.validate(test, schema, { rewrite: true }).errors);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:18:02