我正在查看 github 的 2.2.6 版本的验证器代码。我没有从存储库"https://github.com/fge/json-schema-validator.git"更改任何代码
当我针对引用第二个架构文件的 json 架构测试示例 1 时,我无法运行示例 1(当我求助于硬编码的 URI 时,我可以让它工作(。
我只是简单地将"com.github.fge.jsonschema.examples.example1.java"重定向到使用我的团队json模式和json文件。我已经构建了项目并将我的json模式文件复制到"json-schema-validator\bin\com\github\fge\jsonschema\examples"(都在同一个文件夹中,类似于fstab示例(
附上顶层的一部分,
},
"MovingWindow": {
"description": "Is this an moving window measure?",
"type": "boolean"
}
},
"minItems": 1,
"uniqueItems": true
},
"RealTimeProfile": {
"$ref": "rtp.json#"
}
},
"required": [
"MeasureTemplateId",
"MeasureInstanceId",
但我无法识别和正确工作较低级别的第二架构文件 ("rtp.json"( 的读取。我看到以下错误:
线程"main"中的异常 com.github.fge.jsonschema.core.exceptions.ProcessingException: fatal: URI "rtp.json#" 不是绝对的等级:"致命"URI: "rtp.json#">
我的代码片段:
File jsonFile = new File("CumulativeCountBad.json");
File jsonSchemaFile = new File("main.json");
JsonNode good = JsonLoader.fromFile(jsonFile);
JsonNode mainSchema = JsonLoader.fromFile(jsonSchemaFile);
final JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
final JsonSchema schema = factory.getJsonSchema(mainSchema);
ProcessingReport report;
report = schema.validate(good);
System.out.println("good: " + report);
我的问题似乎类似于以下问题,但是当我将引用设置为以下内容时,我似乎无法运行该内容:"$ref": "rtp.json#">
https://github.com/fge/json-schema-validator/issues/94
任何帮助表示赞赏。PS - 我是java新手,如果我省略了明显的东西,请道歉谢谢
问题是你加载了JSON,然后将其转换为模式。并且您的架构在"id"中没有绝对 URI。所以,它行不通。
您希望使用绝对 URI 来加载它们。由于您最初使用的是File
(注意,在Java 7+中,您确实希望使用java.nio.file(,因此您可以使用以下命令获取它的绝对URI:
final File jsonSchemaFile = new File("main.json");
final URI uri = jsonSchemaFile.toURI();
然后,使用以下命令加载架构:
final JsonSchema schema = factory.getJsonSchema(uri.toString());
我刚刚更改了我的引用从风格 1 : "$ref":"Booking.json"
自风格 2 : "$ref":"resource:/booking-schemas/Booking.json"
它对我有用。可以使用 "$ref":"Booking.json"
生成 json 到 java pojo 文件,但在读取 json 有效负载 style1 时失败。我只是将其更改为样式 2,它在两种情况下都对我有用。
使用 "$id": "/",
更新架构 json 文件。此更改后,架构 json 将具有类似于以下内容的条目:
{
"$schema": "http://json-schema.org/draft-04/schema",
"$id": "/",
"title":"Your title",
"description": "Your description",
...
}
这对我有用。