根据 javascript 中的模式验证 json

Posted

技术标签:

【中文标题】根据 javascript 中的模式验证 json【英文标题】:validate json against schema in javascript 【发布时间】:2016-12-20 13:24:22 【问题描述】:

问题:

是否有一种普通的或原生的 javascript 方法来根据 JSON 模式验证 JSON 脚本?

我在 Github 上找到了很多库,但没有原生/简单的解决方案。 EcmaScript 没有这方面的规范吗?并且没有浏览器(或 nodejs)有办法在本地验证 JSON 吗?

问题背景:

我开发了一个非常复杂的架构。 它应该与一个脚本一起工作,该脚本要求传入的 JSON 数据符合架构。

【问题讨论】:

【参考方案1】:

现在似乎至少有一种纯 JS 解决方案 (https://github.com/tdegrunt/jsonschema) 可通过 npm (https://www.npmjs.com/package/jsonschema) 获得。我不是贡献者,尽管我很欣赏他们的工作。

【讨论】:

【参考方案2】:

简单地说,不。

有一个叫做JSON Schema的东西,它是一个2013年到期的互联网草案。互联网草案是产生Internet Standard的第一阶段。在official site 上查看更多信息,因为它似乎仍在积极开发中,尽管它(据我所知)并未广泛使用。

架构示例:


  "$schema": "http://json-schema.org/schema#",
  "title": "Product",
  "type": "object",
  "required": ["id", "name", "price"],
  "properties": 
    "id": 
      "type": "number",
      "description": "Product identifier"
    ,
    "name": 
      "type": "string",
      "description": "Name of the product"
    ,
    "price": 
      "type": "number",
      "minimum": 0
    ,
    "tags": 
      "type": "array",
      "items": 
        "type": "string"
      
    ,
    "stock": 
      "type": "object",
      "properties": 
        "warehouse": 
          "type": "number"
        ,
        "retail": 
          "type": "number"
        
      
    
  

将验证此示例 JSON:


  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": 
    "warehouse": 300,
    "retail": 20
  

编辑 因为它们都(或多或少)做同样的事情并且具有非常相似的语法,所以性能应该是最大的关注点。请参阅 here 以比较 JSON 验证器的性能 - 获胜者是 ajv,这是我个人使用的原因。

【讨论】:

那么,如果我想验证 JSON 应该怎么做? 使用外部库。我会更新一些建议。 谢谢,我最大的问题是依赖可能不可靠的库 浏览器(客户端)呢? 您可以使用Yup 进行浏览器验证。这是一个强大而灵活的解决方案。但是你需要先将 JSON 转换为 JS 对象。

以上是关于根据 javascript 中的模式验证 json的主要内容,如果未能解决你的问题,请参考以下文章