我正在为 deno 寻找一个类似 ajv 的 json 模式验证器。想知道有没有其他选择?
问问题
1423 次
4 回答
3
您可以选择使用非 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 导入原始 typescript 文件。但是Ajv直接导入 json 文件,deno 不支持 atm。
于 2021-07-07T22:08:21.067 回答
3
您不需要替代品,您可以使用ajv
.
Ajv
为浏览器提供捆绑包: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
于 2020-05-21T09:27:21.883 回答