根据 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的主要内容,如果未能解决你的问题,请参考以下文章

Spring REST API 中的 Json 模式验证

Javascript中的模式验证,带有一个数字点

在序列化之前根据模式验证对象

如何验证 REST 服务中的传入 JSON 数据?

如何组合 Json 模式

PostgreSQL 中的 JSON 模式验证?