【问题标题】:Is there any alternative ajv(json-schema validator) for deno?deno 是否有任何替代 ajv(json-schema 验证器)?
【发布时间】:2022-02-07 22:39:18
【问题描述】:

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

【问题讨论】:

    标签: deno


    【解决方案1】:

    您可以选择使用非 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

    【讨论】:

      【解决方案2】:

      你不需要替代品,你可以使用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

      【讨论】:

      【解决方案3】:

      到目前为止,类似 ajv 的模式验证器还不能用于 Deno。但是,您可以尝试 value_schema 进行架构验证。它有Node.jsDeno 两个版本。

      【讨论】:

      • 我是否正确理解 value_schema/value-schema 无法处理 JSON 模式但实现了它自己的模式定义方式?有没有办法为 JSON 模式生成 value-schema 代码? value-schema 能在多大程度上提供 JSON 模式的功能?
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-04-26
        • 1970-01-01
        • 2019-10-25
        • 2016-08-23
        • 2019-07-24
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多