当前位置: 首页 > 面试题库 >

如何根据Java中指定的版本规范验证JSON模式

姚智
2023-03-14
问题内容

给定这样的json模式。

    {
   “ $ schema”:“ http://json-schema.org/draft-04/schema#”,
   “ title”:“产品”,
   “ description”:“来自Acme目录的产品”,
   “ type”:“对象”,

   “属性”:{

      “ID”: {
         “ description”:“产品的唯一标识符”,
         “ type”:“整数”
      },

      “名称”: {
         “ description”:“产品名称”,
         “ type”:“字符串”
      },

      “价钱”: {
         “ type”:“数字”,
         “最小值”:0,
         “ exclusiveMinimum”:是
      }
   },

   “必填”:[“ id”,“名称”,“价格”]
}

如何验证此json模式是否符合其指定的$ schema,在本例中为草案04。

java中是否有任何软件包可以做到这一点?我可以使用https://github.com/everit-org/json-
schema之类的
东西,还是仅根据其架构验证json文档?

谢谢。


问题答案:

实际上,从每个JSON模式链接的模式都是JSON模式的一种“元模式”,因此您实际上可以按照您的建议使用它来验证模式。

假设我们已经将元模式存储为meta- schema.json,并将潜在模式存储为schema.json。首先,我们需要一种将这些文件加载​​为的方式JSONObjects

public static JSONObject loadJsonFromFile(String fileName) throws FileNotFoundException {
    Reader reader = new FileReader(fileName);
    return new JSONObject(new JSONTokener(reader));
}

我们可以加载元模式,并将其加载到您链接的json模式库中:

JSONObject metaSchemaJson = loadJsonFromFile("meta-schema.json");
Schema metaSchema = SchemaLoader.load(metaSchemaJson);

最后,我们加载潜在的模式并使用元模式对其进行验证:

JSONObject schemaJson = loadJsonFromFile("schema.json");
try {
    metaSchema.validate(schemaJson);
    System.out.println("Schema is valid!");
} catch (ValidationException e) {
    System.out.println("Schema is invalid! " + e.getMessage());
}

给定您发布的示例,它打印“ Schema is
valid!”。但是,如果我们通过改变引入一个错误,例如"type"在的"name"领域"foo",而不是"string",我们会得到以下错误:

Schema is invalid! #/properties/name/type: #: no subschema matched out of the total 2 subschemas


 类似资料:
  • java中有什么包可以做到这一点吗?我可以使用https://github.com/everit-org/json-schema之类的东西吗?或者这只是根据json文档的模式来验证它吗? 多谢了。

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

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

  • 问题: 有没有一种普通的或本机的javascript方法来根据JSON模式验证JSON脚本? 我在Github上找到了很多库,但没有原生/普通的解决方案。EcmaScript没有对此的规范吗?没有浏览器(或nodejs)有办法原生验证JSON吗? 问题的背景: 我有一个非常复杂的模式,我开发了一个。它应该与一个脚本一起工作,该脚本要求传入其中的 JSON 数据符合架构。

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

  • iam试图验证一些可能包含swagger规范的字符串。我正在尝试使用swagger解析器。 以下代码不起作用。我只收到消息:“[属性不是]类型” swagger规范是从xml文件中读出的。 这个方法是错误的吗?或者。错误消息的含义是什么?我只想知道字符串是否包含JSON格式的有效Swagger规范。 谢谢你的帮助。 更新:问题已解决 据我所知,如果字符串不是json有效的,就会抛出错误。首先我检查