当前位置: 首页 > 知识库问答 >
问题:

如何将ajv与依赖的JSON-模式一起使用?

齐修贤
2023-03-14

我尝试使ajv使用两个JSON-Schema,一个依赖于另一个。下面是我的模式的一个示例(简化):

json

{
    "$schema":"http://json-schema.org/draft-04/schema#",
    "$id": "http://a.site.org/schemas/types.json",
    "type": "object",
    "definitions": {
        "gender":{"enum": ["male", "female"]}
    },
    "properties":{
        "gender":{"$ref": "#/definitions/gender"}
    }
}
{
"$schema":"http://json-schema.org/draft-04/schema#",
"$id": "http://a.site.org/schemas/definitions.json",
"definitions": {
    "person":{
        "type":"object",
        "properties": {
            "username":{"type":"string"},
            "password": {"type":"string"},
            "name":{"type":"string"},
            "surname":{"type":"string"},
            "sex":{"$ref": "types.json#/properties/gender"},
            "email":{"type":"string", "format":"email"}
        },
        "required":["name", "surname", "sex", "email"]
    }
},
"type":"object",
"properties": {
    "person": {"$ref": "#/definitions/person"}
    }
}
import Ajv, {JSONSchemaType, DefinedError} from "ajv"
import {Gender} from "./types"
import {Person} from "./definitions";
const ajv = new Ajv()

const types : JSONSchemaType<Gender>= require("../types.json");
const PersonSchema : JSONSchemaType<Person> = require('../definitions.json').definitions.person;

const isPerson = ajv.addSchema(types).compile(PersonSchema);
const riccardo:Person={name: "Riccardo", surname: "surname", sex: "male", email: "email@gmail.com"};
const personValid = isPerson(riccardo);
if (!personValid) console.log(isPerson.errors)

错误:没有带有键或引用“http://json-schema.org/draft-04/schema#”的模式

更新:如果我从types.json中删除“$schema…”,我得到的错误是:

MissingReferror:无法从id#中解析引用types.json#/definitions/gender

共有1个答案

廉雅惠
2023-03-14

从版本7开始,对draft-04的支持已经删除。如果要使用draft-04,则需要使用AJV的版本6。

 类似资料:
  • 在Martin Fowler的书中,我读到了和模式。 作者提到,将identityMap放在UnitOfWork内部是一个好主意。但怎么做呢? 据我所知,受会话限制,但作者没有提到 每个unitOfWork实例需要多少个IdentityMap实例? 如果我们有两个并发请求呢?

  • 早上好,当对同一个json文件中定义的内容使用$ref时,我在使用ajv和json-schema时遇到了一个问题。我怀疑问题出在ids的使用上,我会更理解这一点。 我的文件是: definitions.json json

  • 我正在读取Kafka的流,我将Kafka的值(即JSON)转换为结构。 有一个变体,它采用类型的模式,但我找不到示例。请告知下面代码中的错误。 错误 程序

  • 问题内容: 我试图将Python 3程序反向移植到2.7,但遇到了一个奇怪的问题: 根据文档,返回Unicode文本的内存流。当我尝试手动输入Unicode字符串时,它可以正常工作。为什么即使所有写入的字符串都是Unicode字符串,它也无法与模块结合使用?在什么地方来,它使得异常? (我知道我可以代替使用,但是我想知道在这种情况下怎么了) 问题答案: Python 2.7模块不支持Unicode

  • 问题内容: 我有这个package.json文件: 我想部署到Heroku。它在本地使用npm 1.0.105可以很好地工作,但是在Heroku上令人窒息(我在那里也将npm更新为1.0.105): 另外,我似乎也找不到在/ tmp中访问该日志文件的方法。 当有人成功在Heroku上部署Git依赖项时(在ruby方面:P可以正常工作)? 问题答案: 问题出在他们的nodejs buildpack中