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代码示例相关推荐

  1. java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...

  2. java打印心_使用java打印心型与圆形图案实现代码示例

    本篇文章小编给大家分享一下使用java打印心型与圆形图案实现代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 相信对于打印三角形都没什么难度,只 ...

  3. Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例

    Java 泛型(generics)详解及代码示例.Java 类型通配符详解及代码示例 - 概念 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制 ...

  4. json schema多种形式_Json Schema简介

    1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...

  5. json schema多种形式_JSON Schema 简介

    在前后端分离架构下,JSON 格式被广泛用于前端的数据交互,并成为事实上的规范,但前端在编写表单的过程中,依旧对着字段和后端进行 CRUD,这其中的效率有可能提升吗?有什么规范能通用解决表单类的中后台 ...

  6. java实现stack search_Java Stack search()用法及代码示例

    Java中的java.util.Stack.search(Object element)方法用于搜索堆栈中的元素并获取其与顶部的距离.此方法从1开始而不是从0开始计数位置.位于堆栈顶部的元素被视为在位 ...

  7. java short字段_Java Field setShort()用法及代码示例

    java.lang.reflect.Field的setShort()方法用于将字段的值设置为指定对象的缩写.当您需要将对象的字段值设置为短时,可以使用此方法在对象上设置值. 用法: public vo ...

  8. java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例

    如果AtomicReferenceArray对象的索引i处的当前值等于期望值,则使用AtomicReferenceArray类的compareAndSet()方法原子地将AtomicReference ...

  9. java中的getfirst_Java LinkedList getFirst()用法及代码示例

    Java.util.LinkedList.getFirst()方法用于从LinkedList或列表开头的元素中获取或检索第一个元素. 用法: LinkedList.getFirst() 参数:此方法不 ...

最新文章

  1. 2018HDU多校训练-3-Problem G. Interstellar Travel
  2. Generator + Promises, the best of all worlds in ES6
  3. IPython基础使用_Round2
  4. bzoj 4942: [Noi2017]整数
  5. plsqldev远程连接mysql_PLSQL Developer连接远程Oracle数据库
  6. 数据流InputStream转字符串
  7. 一个美女买裤子的全过程
  8. java中文乱码转换编程_java中文乱码如何转换
  9. PPT训练营-【目录页】
  10. c语言细胞自动机,关于细胞自动机的程序..求救!!谢谢!
  11. Visio从安装到使用完整版
  12. 交直流配电网潮流计算matlab,干货丨交直流混合配电网潮流计算(含分布式电源)...
  13. Unrecogized font family ‘Ionicons’ 在ios上报错,android正常
  14. 标书制作,全流程视频教程大全
  15. 骄傲地宣布一件事:月入3万的目标还没实现
  16. java实现心型代码
  17. 微信服务商子商户支付
  18. 轻松带你上手最好用的操作Excel工具——EasyExcel
  19. 数学建模竞赛知识点汇总(一)——层次分析法
  20. GoC编程工具、GoC软件、GoC编程PPT

热门文章

  1. 【经典算法题】二叉树的最近公共祖先
  2. python运行程序为什么会卡住_为什么我的 Python 程序卡住啦!
  3. 加速量子计算化学应用 2022 QHack量子化学挑战赛即将开始
  4. Problem K You Are Fired!
  5. hadoop搭建好后,页面访问不了
  6. repository和repertory
  7. 嵌入式Linux下3G无线上网卡的驱动
  8. Nacos 1.4.1 紧急升级修复Alibaba Nacos 认证绕过漏洞
  9. 基于android的移动学习平台(前端APP+后端Java和MySQL)
  10. 怎样用才c语言定义一个三位数,怎样编写一个c语言程序计算任意输入一个3位数的整数的各位数字之和。要求主函数包括输入输出和调用该函数。...