【发布时间】:2022-02-07 22:39:18
【问题描述】:
我正在为 deno 寻找类似 ajv 的 json 模式验证器。想知道有没有其他选择?
【问题讨论】:
标签: deno
我正在为 deno 寻找类似 ajv 的 json 模式验证器。想知道有没有其他选择?
【问题讨论】:
标签: deno
您可以选择使用非 deno 模块。
最简单的方法是使用esm.sh 之类的服务并将其导入:
import Ajv from 'https://esm.sh/ajv@8.6.1';
import addFormats from 'https://esm.sh/ajv-formats@2.1.0';
const ajv = new Ajv({allErrors: true});
addFormats(ajv);
esm.sh 甚至提供 .d.ts 定义(如果可用),因此您也可以导入类型。
import Ajv, {ValidateFunction} from 'https://esm.sh/ajv@8.6.1';
const validate: ValidateFunction = new Ajv().compile(schema);
在某些情况下,您甚至可以直接从 git 导入原始打字稿文件。但是Ajv直接导入json文件,deno does not support atm。
【讨论】:
你不需要替代品,你可以使用ajv。
Ajvprovides a bundle for browsers:https://cdnjs.cloudflare.com/ajax/libs/ajv/6.12.2/ajv.min.js
您只需下载它,将其保存到您的项目中,然后在文件底部添加:export default Ajv。
ajv.js
/* ajv 6.12.2: Another JSON Schema Validator */
!function(e){if("object"==typeof exports&&"undefined"!=typeof module) /*....... */
//# sourceMappingURL=ajv.min.js.map
export default Ajv;
index.js
import Ajv from './ajv.js'
const ajv = new Ajv({allErrors: true});
const schema = {
"properties": {
"foo": { "type": "string" },
"bar": { "type": "number", "maximum": 3 }
}
};
function test(data) {
const valid = validate(data);
if (valid) console.log('Valid!');
else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}
const validate = ajv.compile(schema);
test({"foo": "abc", "bar": 2});
test({"foo": 2, "bar": 4});
请记住,Deno 是一个 JavaScript 运行时,因此任何使用纯 JavaScript 的代码,您只需很少修改即可使用它,在这种情况下只需 export default Ajv
【讨论】:
ajv有一个类型定义文件raw.githubusercontent.com/ajv-validator/ajv/master/lib/ajv.d.ts,所以如果你在import语句前加上// @deno-types="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/ajv.d.ts"前缀,你可以得到类型检查和提示
jtd 是一个可行的选择。它是 JSON Type Definition 的 deno 本机实现,又名 RFC 8927,是 json-schema 验证(因此也是 ajv)的替代方案,但目的相似。
【讨论】: