当前位置: 首页 > 知识库问答 >
问题:

根据javascript中的模式验证json

秦斌
2023-03-14

问题:

有没有一种普通的或本机的javascript方法来根据JSON模式验证JSON脚本?

我在Github上找到了很多库,但没有原生/普通的解决方案。EcmaScript没有对此的规范吗?没有浏览器(或nodejs)有办法原生验证JSON吗?

问题的背景:

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

共有2个答案

施刚毅
2023-03-14

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

尉迟禄
2023-03-14

简单地说,没有。

有个叫JSON Schema的东西,是2013年到期的互联网草案。互联网草案是制定互联网标准的第一步。在官方网站上可以看到更多关于它的信息,因为它似乎仍在积极开发中,尽管(据我所知)它并没有被广泛使用。

架构示例:

{
  "$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验证器的性能——获胜者是ajv,这就是我个人为此使用的。

 类似资料:
  • 问题内容: 我从一些JSON文件创建了API规范,并且尝试测试这些文件是否根据API规范进行了验证。 有一些不错的工具可以根据JSON Schema进行验证,但是我没有找到针对Swagger中创建的规范进行验证的工具(用于创建API架构的工具)。我发现的唯一解决方案是在Swagger- Editor中生成客户端/服务器,这非常麻烦。 是否已经有现有工具可以针对Swagger Schema验证JSO

  • 问题内容: 有没有一种方法可以针对该结构的JSON模式验证JSON结构?我已经查看并发现JSON.Net验证了,但这并不能满足我的要求。 JSON.net可以: 这证明是正确的。 这也证明是真的 仅此验证为假。 理想情况下,我希望它可以验证那里也没有应该存在的字段。 问题答案: 我认为您只需要添加 到您的架构。这将停止提供未知属性。 因此,现在您的结果将是:-正确,错误,错误 测试代码… 输出:-

  • 我从一些JSON文件中创建了一个API规范,并尝试测试这些文件是否符合API规范。 有一些很好的工具可以验证JSON模式,但是我没有机会找到一个工具来验证在Swagger(创建API模式的工具)中创建的规范。我找到的唯一解决方案是在Swagger-Editor中生成客户端/服务器,这很麻烦。 是否已经有一个现有工具可以根据Swagger模式验证JSON?

  • 这是要根据模式验证的JSON。 问题是,如果我们传递了错误的数据,它将正确地验证eid和ename的类型(即整数或字符串)。对于例如: 如果我们为限定传递了错误的类型,那么它将验证为true(即,它不验证限定的类型,可能是因为它是嵌套的)。

  • 据我所知,有一些方法可以根据RDF模式验证序列化的RDF(例如RDF/XML)(如何用您的RDF模式验证RDF)。还有,从RDF/XML到JSON-LD序列化格式的各种转换器(反之亦然)。在Internet上搜索,我找不到一种直接的方法来验证JSON-LD与某种JSON模式的关系,就像RDF模式与RDF(/XML)的关系一样。当然,有各种各样的JSON-LD文档表单,所以我假设一个模式不能很容易地

  • 我正在创建一个用于Postman的JSON模式,其中包含一些模式定义。我针对模式验证的JSON需要与模式定义之一匹配。 示例模式 JSON数据示例 此JSON根据模式进行验证,并正确标记为无效(因为需要字符串): 问题 此示例根据https://www.jsonschemavalidator.net/返回4个错误: 消息:JSON对“oneOf”中的任何模式都无效。模式路径:#/oneOf 我只对