gpt4 book ai didi

java - JSON 架构 : External JSON Schema file is not validating json

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:52 27 4
gpt4 key购买 nike

我正在尝试使用 json 模式验证 json,问题是我为复杂对象创建了不同的 json 模式文件。我需要使用 ref 标签包含在主架构中。并尝试使用everit lib 验证我的json。架构已加载,但当我尝试验证示例 json 时,它并未验证内部架构对象。

InnerObject.json

   {
"$id": "http://example.com/example.json",
"type": "object",
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"typeCode": {
"$id": "/properties/typeCode",
"type": "string"
},
"description": {
"$id": "/properties/description",
"type": "string"
},
"expDate": {
"$id": "/properties/expDate",
"type": "string"
},
"issuingCountry": {
"$id": "/properties/issuingCountry",
"type": "string"
}
},
"required": [
"typeCode",
"description",
"expDate",
"issuingCountry"
]
}

OuterObject.JSON

    {
"$id": "http://example.com/example.json",
"type": "object",
"definitions": {
},
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"firstName": {
"$id": "/properties/firstName",
"type": "string"
},
"lastName": {
"$id": "/properties/lastName",
"type": "string"
},
"innerObject": {
"$id": "#item",
"type": "object",
"$ref": "file://com/mypack/innerObject.json"
}
},
"required": [
"firstName",
"lastName",
"innerObject"
]
}

这两个文件都在我的项目 src/main/resource 中

我有 json validator 类,用于测试我的架构。

import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.json.JSONTokener;

public class JSONSchemaValidator {
public static void main(String[] args) {
JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaValidator.class
.getResourceAsStream("/com/schema/outer.schema.json")));
JSONObject outerJson = new JSONObject();

JSONObject innerJson = new JSONObject();

innerJson.put("expDate", "expDate");
innerJson.put("typeCode", "typeCode");

outerJson.put("firstName", "firstName");
outerJson.put("lastName", "lastName");

outerJson.put("innerObject", innerJson);

Schema schema = SchemaLoader.load(jsonSchema);

System.out.println(schema.getDescription());
schema.validate(outerJson);

System.out.println("done");

}
}

它使用模式验证第一级别,但不验证内部级别。任何人都可以建议做错了什么,这样它就不会验证 json。

我尝试验证的示例 JSON 是:

{"firstName":"firstName","lastName":"lastName","innerObject":{"expDate":"expDate","typeCode":"typeCode"}}

它应该抛出一个错误,因为“typeCode”“description”,“expDate”,issuingCountry“4个字段是必填字段,并且在输入中我只传递两个字段。因此对于剩下的两个字段,它应该抛出一个错误。

最佳答案

只需在带有 ref 标签的外部 json 中提供内部 json 文件即可。

例如:

{
"$id": "http://example.com/example.json",
"type": "object",
"definitions": {
},
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"firstName": {
"$id": "/properties/firstName",
"type": "string"
},
"lastName": {
"$id": "/properties/lastName",
"type": "string"
},
"innerObject": {
"$ref": "innerObject.json"
}
},
"required": [
"firstName",
"lastName",
"innerObject"
]
}

在Java代码中,您需要设置resolutionScope,您需要提供内部json的路径。

String path="file:" + Paths.get("").toUri().getPath() + "PATH_OF_YOUR_JSONSchema";
System.out.println("older"+ path);
if (path.contains(" ")) {
path=path.replaceAll(" ", "%20");
}
SchemaLoader sl=SchemaLoader.builder().schemaJson(jsonSchema).resolutionScope(path ).build();
Schema schema=sl.load().build();
schema.validate(yourJsonObject);

关于java - JSON 架构 : External JSON Schema file is not validating json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51193544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com