6

我正在为 deno 寻找一个类似 ajv 的 json 模式验证器。想知道有没有其他选择?

4

4 回答 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 回答
1

到目前为止,Deno 还没有类似 ajv 的模式验证器。但是,您可以尝试value_schema进行模式验证。它有Node.jsDeno版本。

于 2020-05-21T08:27:38.530 回答
0

jtd是一个可行的选择。它是JSON 类型定义(又名RFC 8927 )的 deno 本机实现,它是验证(因此也是 ajv)的替代方案,json-schema但具有类似的目的。

于 2022-02-07T14:39:18.970 回答