我很难找到一种最简单的方法来根据给定的JSON-schema字符串来验证JSON字符串(作为参考,这是在Java中,在Android应用程序中运行)。
理想情况下,我只想传入一个JSON字符串和一个JSON模式字符串,它会返回一个布尔值,说明它是否通过了验证。通过搜索,我找到了以下两个很有前途的库来实现这一点:
https://github.com/fge/json-schema-validator
然而,第一个似乎相当过时,支持率很低。我在我的项目中实现了这个库,即使使用他们的JavaDocs,我也不知道如何正确地构建用于验证的“验证器”对象。
与第二个类似的故事,它似乎是最新的,有很好的测试代码。然而,对于我想要做的事情,这非常简单,对于如何具体实现我想要的东西似乎有点令人望而生畏和困惑(即使在查看了ValidateServlet.java文件之后)。
好奇是否有人有任何其他的建议来完成这个(从它看起来)的好方法,需要的简单任务,或者如果我可能需要坚持上面的第二个选项?提前感谢!
发布于 2013-01-25 06:18:38
这实际上就是您链接的Servlet所做的事情,所以它可能不是一行程序,但它仍然具有表现力。
servlet上指定的useV4
和useId
用于指定Default to draft v4
和Use id for addressing
的验证选项。
你可以在网上看到:http://json-schema-validator.herokuapp.com/
public boolean validate(String jsonData, String jsonSchema, boolean useV4, boolean useId) throws Exception {
// create the Json nodes for schema and data
JsonNode schemaNode = JsonLoader.fromString(jsonSchema); // throws JsonProcessingException if error
JsonNode data = JsonLoader.fromString(jsonData); // same here
JsonSchemaFactory factory = JsonSchemaFactories.withOptions(useV4, useId);
// load the schema and validate
JsonSchema schema = factory.fromSchema(schemaNode);
ValidationReport report = schema.validate(data);
return report.isSuccess();
}
发布于 2016-10-13 10:18:09
@Alex的答案适用于我的Android系统,但需要我使用Multi-dex并添加:
packagingOptions {
pickFirst 'META-INF/ASL-2.0.txt'
pickFirst 'draftv4/schema'
pickFirst 'draftv3/schema'
pickFirst 'META-INF/LICENSE'
pickFirst 'META-INF/LGPL-3.0.txt'
}
到我的build.gradle
https://stackoverflow.com/questions/14511468
复制相似问题