在json schema 中使用正则表达进行校验(Java)

json schema的基本概念这里就不多说了,有很多博客介绍地很详细,基本都是互相抄来抄去的东西。
以下是一个json schema校验所需json格式的例子。
以下是json schema的格式:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/teacher.schema.json",
  "title": "........",
  "description": ".......描述",
  "type": "object",
  "properties": {
    "channel_type": {
      "description": "......",
      "type": "string",
      "pattern": "^(hello|world|study|java)$"
    },
    "vehicle_type": {
      "description": "........",
      "type": "string",
      "pattern": "^(json|schema|is|convenient)$"
    },
    "is_need_support_camera": {
      "description": ".......",
      "type": "boolean"
    },
    "is_use_old_roadgate": {
      "description": ".......",
      "type": "boolean"
    },
    "is_need_remote_control_gate": {
      "description": ".........",
      "type": "boolean"
    },
    "is_unattended": {
      "description": ".........",
      "type": "boolean"
    }
  },
  "required": [
    "channel_type",
    "vehicle_type",
    "is_need_support_camera",
    "is_use_old_roadgate",
    "is_need_remote_control_gate",
    "is_unattended"
  ]
}

需要校验的json格式一个样例为:

{
    "channel_type": "hello",
    "vehicle_type": "json",
    "is_need_support_camera":true,
    "is_use_old_roadgate":false,
    "is_need_remote_control_gate":true,
    "is_unattended":true
}

其中channel_typevehicle_type为string类型的字段,在这里又对他们的取值进行了限定,即channel_type只能取值为hello,world,stduy,java四个字符串中的任意一个。使用了正则表达式^(hello|world|study|java)$。进行限定。vehicle_type
字段同理。
Java 代码如下:

import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jackson.JsonLoader;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
public boolean validateJasonSchema(String validateStr, String validateSchema) {
        if (org.apache.commons.lang.StringUtils.isEmpty(validateStr) || org.apache.commons.lang.StringUtils
            .isEmpty(validateSchema)) {
            return false;
        } else {
            try {
                JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
                JsonNode data = JsonLoader.fromString(validateStr);
                JsonNode schema = JsonLoader.fromString(validateSchema);
                JsonSchema jsonSchema = factory.getJsonSchema(schema);
                ProcessingReport report = jsonSchema.validate(data);
                return report.isSuccess();
            } catch (Exception e) {
                logger.error("json schema 验证出错", e);
            }
        }
        return false;
    }

在使用相关类之前需要先在pom.xml文件中导入相关依赖,如下:

 <dependency>
 	<groupId>com.github.java-json-tools</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>2.2.10</version>
</dependency>
### 回答1: 使用 Java 语言编写程序来校验 JSON Schema 是非常容易的,可以使用许多库和框架来帮助您实现它。有许多第三方库和框架可以用于校验 JSON 格式,这些库和框架包括:Jackson,Gson,Genson,Apache Commons,Hibernate Validator,JsonSchemaJsonPath 和 FastJSON。 ### 回答2: 在Java,可以使用现有的库来编写代码,使用jsonSchema校验数据。下面是使用Java编写的示例代码: 首先,需要导入相关的依赖库,例如使用Jackson库来处理JSON数据和使用json-schema-validator库来执行jsonSchema校验。可以通过Maven或Gradle等构建工具来管理依赖。 接下来,创建一个方法来执行校验操作。首先,需要定义jsonSchema的规则,可以使用JSON字符串或从外部文件加载。然后,需要将待校验的数据转换为JSON对象,可以使用Jackson库将字符串解析为JSON对象。 然后,使用json-schema-validator库JsonSchemaFactory类来创建JsonSchema实例。使用JsonSchema的validate方法对JSON数据进行校验,该方法会返回校验结果。 最后,根据校验结果进行相应的处理,可以输出校验失败的原因或执行其他操作。 以下是一个简单的示例代码: ```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.fge.jsonschema.core.exceptions.ProcessingException; import com.github.fge.jsonschema.core.report.ProcessingReport; import com.github.fge.jsonschema.main.JsonSchema; import com.github.fge.jsonschema.main.JsonSchemaFactory; public class JsonValidator { public static void main(String[] args) { String schema = "{ \"type\": \"object\", \"properties\": { \"name\": { \"type\": \"string\" } } }"; String data = "{ \"name\": \"John\" }"; boolean isValid = validateData(schema, data); if (isValid) { System.out.println("Data is valid."); } else { System.out.println("Data is invalid."); } } public static boolean validateData(String schemaString, String dataString) { ObjectMapper objectMapper = new ObjectMapper(); JsonNode schemaNode, dataNode; try { schemaNode = objectMapper.readTree(schemaString); dataNode = objectMapper.readTree(dataString); } catch (Exception e) { e.printStackTrace(); return false; } JsonSchemaFactory schemaFactory = JsonSchemaFactory.byDefault(); try { JsonSchema schema = schemaFactory.getJsonSchema(schemaNode); ProcessingReport report = schema.validate(dataNode); return report.isSuccess(); } catch (ProcessingException e) { e.printStackTrace(); return false; } } } ``` 以上代码使用了Jackson库将schema和数据解析为JSON节点,然后使用json-schema-validator库来创建JsonSchema对象,并使用validate方法进行校验。最后根据校验结果输出相应的信息。 当运行以上代码时,如果数据满足schema的定义,会输出"Data is valid.",否则输出"Data is invalid."。这个示例使用了简单的schema和数据进行校验,实际使用可以根据需要定义更复杂的schema,并使用更复杂的校验逻辑。 ### 回答3: 使用Java编写可以使用以下步骤来使用jsonSchema校验数据。 首先,你需要引入json-schema-validator库。你可以在Maven或Gradle添加以下依赖项: 对于Maven: ```xml <dependency> <groupId>org.everit.json</groupId> <artifactId>org.everit.json.schema</artifactId> <version>1.12.1</version> </dependency> ``` 对于Gradle: ```groovy implementation 'org.everit.json:org.everit.json.schema:1.12.1' ``` 接下来,你需要创建一个json schema的字符串或从文件读取json schema。假设你有以下的json schema字符串: ```json String schemaStr = "{\n" + " \"type\": \"object\",\n" + " \"properties\": {\n" + " \"name\": {\n" + " \"type\": \"string\"\n" + " },\n" + " \"age\": {\n" + " \"type\": \"integer\"\n" + " }\n" + " },\n" + " \"required\": [\"name\", \"age\"]\n" + "}"; ``` 然后你可以使用下面的代码来校验数据: ```java import org.everit.json.schema.Schema; import org.everit.json.schema.ValidationException; import org.everit.json.schema.loader.SchemaLoader; import org.json.JSONObject; import org.json.JSONTokener; class Main { public static void main(String[] args) { String dataStr = "{\"name\":\"John\", \"age\":30}"; try { JSONObject jsonSchema = new JSONObject(new JSONTokener(schemaStr)); JSONObject jsonData = new JSONObject(new JSONTokener(dataStr)); Schema schema = SchemaLoader.load(jsonSchema); schema.validate(jsonData); System.out.println("数据是有效的"); } catch (ValidationException e) { System.out.println("数据无效:" + e.getMessage()); } } } ``` 以上代码将创建一个Schema对象,并使用Schema.validate方法来验证数据。如果数据有效,将输出“数据是有效的”,否则将输出"数据无效"及详细错误信息。 这就是使用Java编写jsonSchema校验数据的基本步骤。你可以根据自己的需求修改json schema和数据,并在代码进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值