【问题标题】:嵌套模式的ajv JSON验证器中的missingRef
【发布时间】:2022-01-23 05:44:20
【问题描述】:

我有一个简化后的架构,如下所示:

{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://example.com/schemata/my.schema.json#",
"type": "boolean",
"default": true,
"$defs": {
    "oid": {
        "title": "Object ID",
        "type": "string"
    },
    "oid_list": {
        "title": "Object Ids List",
        "type": "array",
        "items": {"$ref": "#/$defs/oid"},
        "uniqueItems": true
    }
}
}

我正在尝试将它与 Ajv 一起使用来验证一些 JSON 数据。

const Ajv = require ('ajv');
const ajv = new Ajv();
const fs = require ('fs');
const schema = JSON.parse(fs.readFileSync('./schemata/my.schema.json'));
const validate = ajv.compile(schema.$defs.oid_list);
const data = ['wibble', 'wobble'];
const valid = validate (data);

上面的代码给了我一个"missingRef": "#$defs/oid" 错误。

但是 vscode 中的架构验证器在解析引用并将架构验证应用于我告诉它查看的文件时没有问题。

我是 Ajv 的新手。希望这是一个简单的错误。

提前感谢您的帮助。

【问题讨论】:

  • consts 很多。你所有的代码都是这样写的吗?
  • 这有点像货物崇拜 - 我从这里的例子开始 ajv.js.org/guide/getting-started.html 但是,如果数量不是有意改变的,是的,我总是声明它们 const

标签: node.js json jsonschema ajv


【解决方案1】:

我取得了一些进展。此代码按预期工作:

ajv.addSchema(schema.$defs.oid, '#/$defs/oid');
ajv.addSchema(schema.$defs.oid_list, '#/$defs/oid_list');
const data = ['wibble', 'wobble'];
const valid = ajv.validate (schema.$defs.oid_list,data); // == true

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 2017-11-08
    • 2017-04-29
    • 2018-12-24
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多