问题:
是否有一种简单或原生的javascript方法来验证JSON模式的JSON脚本?
我在Github上发现了很多库,但没有原生/普通的解决方案。 EcmaScript没有这方面的规范吗?并且没有一个浏览器(或nodejs)有办法本地验证JSON吗?
问题背景:
我开发了一个非常复杂的架构。 它应该与一个脚本一起工作,该脚本要求传递给它的JSON数据符合模式。
答案 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,这是我个人使用的原因。