java schema校验_Json Schema 校验json,java代码示例
Json Schema 校验json,java代码示例
1、json schema 入门请参考下面两篇博客
1.1Json Schema 快速入门
1.2Json Schema 简介
2、java代码实现步骤
2.1引入依赖
com.github.fge
json-schema-validator
2.2.6
2.2创建工具类JsonSchemaUtil
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonLoader;
import com.github.fge.jackson.JsonNodeReader;
import com.github.fge.jsonschema.core.report.LogLevel;
import com.github.fge.jsonschema.core.report.ProcessingMessage;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
import org.springframework.util.ResourceUtils;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
public class JsonSchemaUtil {
/**
* @param jsonStr 验证json字符串
*/
public static JsonNode strToJsonNode(String jsonStr) {
JsonNode jsonNode = null;
try {
jsonNode = JsonLoader.fromString(jsonStr);
} catch (IOException e) {
e.printStackTrace();
}
return jsonNode;
}
/**
* @param jsonFilePath jsonSchema文件路径
*/
public static JsonNode schemaToJsonNode(String jsonFilePath) {
JsonNode jsonSchemaNode = null;
try {
jsonSchemaNode = new JsonNodeReader().fromReader(new FileReader(ResourceUtils.getFile(jsonFilePath)));
} catch (IOException e) {
e.printStackTrace();
}
return jsonSchemaNode;
}
/**
* @param jsonNode json数据node
* @param schemaNode jsonSchema约束node
*/
private static boolean getProcessingReport(JsonNode jsonNode, JsonNode schemaNode) {
//fge验证json数据是否符合json schema约束规则
ProcessingReport report = JsonSchemaFactory.byDefault().getValidator().validateUnchecked(schemaNode, jsonNode);
if (report.isSuccess()) {
// 校验成功
return true;
} else {
Iterator it = report.iterator();
StringBuilder ms = new StringBuilder();
ms.append("json格式错误: ");
while (it.hasNext()) {
ProcessingMessage pm = it.next();
if (!LogLevel.WARNING.equals(pm.getLogLevel())) {
ms.append(pm);
}
}
System.err.println(ms);
return false;
}
}
}
2.3测试数据
schema:
{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"cat",
"properties":{
"name":{
"type":"string"
},
"age":{
"type":"number",
"description":"Your cat's age in years"
},
"declawed":{
"type":"boolean"
},
"description":{
"type":"string"
}
},
"required":[
"name",
"age",
"declawed"
]
}
json:
{
"name":"TOM",
"age":23,
"declawed":false,
"description":"TOM loves to sleep all day."
}
参考:
JSON解析器之json schema校验及代码实现
json schema 在线测试
https://www.bbsmax.com/A/D854nv0VzE/
https://blog.csdn.net/weixin_42534940/article/details/86594376
https://www.jianshu.com/p/d94d1c87b2eb
https://blog.csdn.net/ExcellentYuXiao/article/details/52345550
java schema校验_Json Schema 校验json,java代码示例相关推荐
- java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例
本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...
- java打印心_使用java打印心型与圆形图案实现代码示例
本篇文章小编给大家分享一下使用java打印心型与圆形图案实现代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 相信对于打印三角形都没什么难度,只 ...
- Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例
Java 泛型(generics)详解及代码示例.Java 类型通配符详解及代码示例 - 概念 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制 ...
- json schema多种形式_Json Schema简介
1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...
- json schema多种形式_JSON Schema 简介
在前后端分离架构下,JSON 格式被广泛用于前端的数据交互,并成为事实上的规范,但前端在编写表单的过程中,依旧对着字段和后端进行 CRUD,这其中的效率有可能提升吗?有什么规范能通用解决表单类的中后台 ...
- java实现stack search_Java Stack search()用法及代码示例
Java中的java.util.Stack.search(Object element)方法用于搜索堆栈中的元素并获取其与顶部的距离.此方法从1开始而不是从0开始计数位置.位于堆栈顶部的元素被视为在位 ...
- java short字段_Java Field setShort()用法及代码示例
java.lang.reflect.Field的setShort()方法用于将字段的值设置为指定对象的缩写.当您需要将对象的字段值设置为短时,可以使用此方法在对象上设置值. 用法: public vo ...
- java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例
如果AtomicReferenceArray对象的索引i处的当前值等于期望值,则使用AtomicReferenceArray类的compareAndSet()方法原子地将AtomicReference ...
- java中的getfirst_Java LinkedList getFirst()用法及代码示例
Java.util.LinkedList.getFirst()方法用于从LinkedList或列表开头的元素中获取或检索第一个元素. 用法: LinkedList.getFirst() 参数:此方法不 ...
最新文章
- 2018HDU多校训练-3-Problem G. Interstellar Travel
- Generator + Promises, the best of all worlds in ES6
- IPython基础使用_Round2
- bzoj 4942: [Noi2017]整数
- plsqldev远程连接mysql_PLSQL Developer连接远程Oracle数据库
- 数据流InputStream转字符串
- 一个美女买裤子的全过程
- java中文乱码转换编程_java中文乱码如何转换
- PPT训练营-【目录页】
- c语言细胞自动机,关于细胞自动机的程序..求救!!谢谢!
- Visio从安装到使用完整版
- 交直流配电网潮流计算matlab,干货丨交直流混合配电网潮流计算(含分布式电源)...
- Unrecogized font family ‘Ionicons’ 在ios上报错,android正常
- 标书制作,全流程视频教程大全
- 骄傲地宣布一件事:月入3万的目标还没实现
- java实现心型代码
- 微信服务商子商户支付
- 轻松带你上手最好用的操作Excel工具——EasyExcel
- 数学建模竞赛知识点汇总(一)——层次分析法
- GoC编程工具、GoC软件、GoC编程PPT
热门文章
- 【经典算法题】二叉树的最近公共祖先
- python运行程序为什么会卡住_为什么我的 Python 程序卡住啦!
- 加速量子计算化学应用 2022 QHack量子化学挑战赛即将开始
- Problem K You Are Fired!
- hadoop搭建好后,页面访问不了
- repository和repertory
- 嵌入式Linux下3G无线上网卡的驱动
- Nacos 1.4.1 紧急升级修复Alibaba Nacos 认证绕过漏洞
- 基于android的移动学习平台(前端APP+后端Java和MySQL)
- 怎样用才c语言定义一个三位数,怎样编写一个c语言程序计算任意输入一个3位数的整数的各位数字之和。要求主函数包括输入输出和调用该函数。...