【问题标题】:JSON Schema parser/validator with callbacks?带有回调的 JSON Schema 解析器/验证器?
【发布时间】:2014-06-13 17:46:38
【问题描述】:

什么是可扩展的 JavaScript 中可靠的 JSON Schema 验证器 - 从某种意义上说,您可以在解析元素时添加功能的钩子?

【问题讨论】:

  • 您想要什么样的额外功能?例如,tv4(免责声明:我的项目)允许您定义自定义关键字(以及自定义格式等)
  • 我需要在解析部分 JSON 文档时将它们存储在缓存中。我正在寻找像 onEachField() 这样的回调,就像 Ivartech 的解析器 JULES 一样。但我也在尝试 tv4,因为它被广泛使用。
  • OK - 您希望动态加载输入数据的位?所以当需要给定属性时你会得到某种回调?我很高兴在需要的地方为 tv4 添加功能。
  • 是的,看起来很有用。我认为 XML 世界中对这种事情有很多支持,就像 SAX 解析器一样,但在 JSON 世界中还没有那么多。
  • 酷 - 你能提出一个 GitHub 问题吗?

标签: javascript json validation parsing jsonschema


【解决方案1】:

JJV 允许您添加custom checks

大概是这样的:

env.addCheck('cache', function (v, p) {
    if(p) { //you don't need the 'if' if you didn't want to.
        //your caching code goes here
        return true; //to make sure it doesn't invalidate the check
    }
});

json 架构 sn-p

firstname: {
            type: 'string',
            cache: true //could be anything if you didn't want the if(p) 
        }

【讨论】:

    【解决方案2】:

    查看 WADL 规范 (http://wadl.java.net) 和 JSON 模式规范 (http://json-schema.org/examples.html)。

    希望对你有帮助。

    西蒙娜

    【讨论】:

      【解决方案3】:

      FieldVal 支持带有结构化错误报告的同步和异步验证(浏览器/Node.js 等)。它提供了许多常见的验证功能(即电子邮件、日期、网址等)并允许添加自定义功能。

      异步验证的基本示例如下所示:

      var params = {email: "email@example.com"}
      var validator = new FieldVal(params);
      
      //Email validation
      validator.get_async("email", [BasicVal.email(), function(value, emit, callback) {  
          //Imitating asynchronous database call
          setTimeout(function() {
              callback({
                  error: 1001,
                  error_message: "Email already exists"
              })
          }, 5);
      }]);
      
      validator.end(function(error) {  
          if (error) {
              //Do something about the error
          } else {
              //Everything is valid - proceed
          }
      });
      

      阅读我们的blog post 了解更多高级示例。

      免责声明:我正在为该项目做出贡献。

      【讨论】:

        【解决方案4】:

        如果您不介意给我创建的名为 JULES 的 JSON 验证器,请尝试https://github.com/stamat/jules 并告诉我您的想法。有一种方法可以扩展 JSON Schema:

        jules.validator.new_keyword = function(value, keyword, schema) {
            //define your validator here
            return true;
        };
        

        【讨论】:

          猜你喜欢
          • 2021-04-14
          • 1970-01-01
          • 2014-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多