在javascript中验证json对模式

时间:2016-08-13 19:53:55

标签: javascript json ecmascript-6 schema

问题:

是否有一种简单或原生的javascript方法来验证JSON模式的JSON脚本?

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

问题背景:

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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
  }
}

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