错误:无法解析来自 id 的引用 error.json #

Mih*_*sov 5 json jsonschema ajv

我不明白如何正确引用其他架构。\n我使用了ajv,并且有接下来的两个架构

\n\n

第一个架构不正确-email.json:

\n\n
{\n  "title": "\xd0\x9d\xd0\xb5 \xd0\xba\xd0\xbe\xd1\x80\xd1\x80\xd0\xb5\xd0\xba\xd1\x82\xd0\xbd\xd1\x8b\xd0\xb9 email",\n  "properties": {\n    "status": {\n      "description": "\xd0\xa1\xd1\x82\xd0\xb0\xd1\x82\xd1\x83\xd1\x81 \xd0\xbe\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8",\n      "type": "integer",\n      "enum": [68]\n    },\n    "error": {\n      "$ref":"error.json"\n    }\n  },\n  "required":["status", "error"],\n  "additionalProperties": false\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二个架构 error.json:

\n\n
{\n  "type": "array",\n  "minItems": 2,\n  "items": {\n    "type": "object",\n    "properties": {\n      "description_ru": {\n        "description": "\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f \xd0\xbe\xd0\xb1 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb5 \xd0\xbd\xd0\xb0 \xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xbe\xd0\xbc \xd1\x8f\xd0\xb7\xd1\x8b\xd0\xba\xd0\xb5",\n        "type": "string"\n      },\n      "description_en": {\n        "description": "\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f \xd0\xbe\xd0\xb1 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb5 \xd0\xbd\xd0\xb0 \xd0\xb0\xd0\xbd\xd0\xb3\xd0\xbb\xd0\xb8\xd0\xb9\xd1\x81\xd0\xba\xd0\xbe\xd0\xbc \xd1\x8f\xd0\xb7\xd1\x8b\xd0\xba\xd0\xb5",\n        "type": "string"\n      }\n    },\n    "additionalProperties": false\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

运行测试后我收到此错误

\n\n
\n

错误:无法解析来自 id #\n 的引用 error.json 我的验证方法:

\n
\n\n
var valid = ajv.validate(require("../schema/login/incorrect-email.json"), data);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要引用本地模式 error.json,而不是远程服务器等。\n请告诉我,我可以在此模式中添加 id 和 $ref 以便使用 ajv 进行正确解析

\n

esp*_*esp 4

无需更改架构文件,您可以执行以下操作:

ajv.addSchema(require('./incorrect-email.json', 'incorrect-email.json'));
ajv.addSchema(require('./error.json'), 'error.json');
var valid = ajv.validate('incorrect-email.json', data);
Run Code Online (Sandbox Code Playgroud)

您可以在架构本身中指定 ID 属性,而不是在 addSchema 调用中指定架构 ID(建议)。无论如何,Ajv 默认情况下不会使用任何 IO 来加载 schema,必须使用 addSchema 方法预加载 schema。使用compileAsync方法时,您可以动态(异步)加载架构,但您必须自己指定加载机制(可以是任何内容 - fs、http等)。