有时候JSON 数据格式需要校验是否合法,我们可以使用 JsonSchema 来校验数据是否合法。

引入 pom.xml

https://json-schema.org/

<dependency>
<groupId>com.networknt</groupId>
<artifactId>json-schema-validator</artifactId>
<version>1.4.0</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.networknt.schema.JsonSchema;
import com.networknt.schema.JsonSchemaFactory;
import com.networknt.schema.SpecVersion;
import com.networknt.schema.ValidationMessage; import java.util.Set; public class ValidJson { public static void main(String[] args) throws JsonProcessingException {
String json="{\n" +
" \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n" +
" \"title\": \"Order Event\",\n" +
" \"description\": \"Order event schema for example\",\n" +
" \"required\": [\"order_id\", \"total_price\", \"products\" ],\n" +
" \"properties\": {\n" +
" \"order_id\": {\n" +
" \"type\": \"string\"\n" +
" },\n" +
" \"event\": {\n" +
" \"enum\": [\"PLACED\", \"DELIVERED\", \"RETURNED\"],\n" +
" \"type\": \"string\"\n" +
" },\n" +
" \"total_price\": { \n" +
" \"type\": \"number\",\n" +
" \"minimum\": 0\n" +
" },\n" +
" \"products\": {\n" +
" \"type\": \"array\",\n" +
" \"items\": {\n" +
" \"additionalProperties\": true,\n" +
" \"required\": [\"product_id\", \"price\"],\n" +
" \"minItems\": 1,\n" +
" \"properties\": {\n" +
" \"product_id\": {\n" +
" \"type\": \"string\"\n" +
" },\n" +
" \"price\": {\n" +
" \"type\": \"number\",\n" +
" \"minimum\": 0\n" +
" },\n" +
" \"quantity\": {\n" +
" \"type\": \"integer\"\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}"; String json2="{\n" +
" \"order_id\":\"order134\",\n" +
" \"event\": \"PLACED\",\n" +
" \"products\": [\n" +
" {\n" +
" \"product_id\": \"product_1\",\n" +
" \"price\":20.5,\n" +
" \"quantity\":2\n" +
" }\n" +
" ],\n" +
" \"total_price\": 41\n" +
"}"; JsonSchema jsonSchema = jsonSchema(json); ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json2); String str= validateJson(jsonSchema,jsonNode); System.err.println(str); } public static JsonSchema jsonSchema(String schema) {
return JsonSchemaFactory
.getInstance( SpecVersion.VersionFlag.V7 )
.getSchema(schema);
} public static String validateJson(JsonSchema jsonSchema, JsonNode jsonNode){
Set<ValidationMessage> errors = jsonSchema.validate(jsonNode);
return errors.toString();
}
}

使用 JsonSchema 校验 JSON数据的更多相关文章

  1. 利用JsonSchema校验json数据内容的合规性(转)

    原文地址:Json schema 背景: 复杂的AJAX应用程序可以与数百个不同的JSON服务进行交互,因此,引入对客户端验证的需求. 在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类 ...

  2. 利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...

  3. jsonpath对json数据进行分析校验做接口测试

    在做接口测试的时候, 我们需要对返回的数据进行分析校验, 一般返回的都是json格式的数据, 怎么来解析校验呢? 之前有看过使用递归遍历json数据的, 然后找到了jsonpath, 可以很方便的对j ...

  4. struts2 的验证框架validation如何返回json数据 以方便ajax交互

    struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror  />才能取出,(EL应该也可以). 如果使 ...

  5. RandomUser – 生成随机用户 JSON 数据的 API

    RandomUser 是一个 API,它为您提供了一个或者一批随机生成的用户.这些用户可以在 Web 应用程序原型中用作占位符,将节省您创建自己的占位符信息的时间.您可以使用 AJAX 或其他方法来调 ...

  6. Android解析中国天气网的Json数据

    在Android开发中.一般的APP都是通过获取server端的数据来更新UI.从server获取到的数据能够是Json.它的数据量要比XML要小,这里解析中国天气网上获取的数据,尽管已经不再更新了. ...

  7. .Net使用JsonSchema验证Json

    最近项目中遇到了这样的需求,需要对上传的Json进行验证,以确保Json数据的准确性.前后使用了两种方式来验证: (1)第一种方式的实现思想:根据Json数据的格式,严格定义相应的类结构,并在Syst ...

  8. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传

    1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...

  9. 关于iOS中几种第三方对XML/JSON数据解析的使用

    Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...

  10. spring-boot json数据交互

    SpringBoot学习之Json数据交互 最近在弄监控主机项目,对javaweb又再努力学习.实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据 ...

随机推荐

  1. x64汇编——汇编指令

    汇编指令 mov dest, src mov move的简称 将src的内容赋值给dest,类似于dest = src [地址值] 中扩号 [ ]里面放的都是内存地址 一个变量的地址值,是它所有字节地 ...

  2. Filter——过滤器

    Filter       Filter 快速入门    Filter 执行流程           1.放行前,对 request 数据进行处理     2.放行后,对 response 数据进行处理 ...

  3. .net6 使用gRPC示例

    创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(客户端),测试项目结构如下: 公共模型 测试接口相关类,放在公共类库中,方便服务端和客户端引用相同模型 public class R ...

  4. SVN(Linux)提交时强制写日志

    SVN(Linux)提交时强制写日志 1.创建并修改pre-commit文件 进入svn/code/hooks目录,在svn版本库的hooks文件夹下面,复制模版pre-commit.tmplcp p ...

  5. ssr屏幕空间射线追踪

    本轮作业中,我们需要在一个光源为方向光,材质为漫反射 (Diffuse) 的场景 中,完成屏幕空间下的全局光照效果(两次反射). 为了在作业框架中实现上述效果,基于我们需要的信息不同我们会分三阶段 着 ...

  6. kotlin协程——>协程上下文与调度器

    协程上下⽂与调度器 协程总是运⾏在⼀些以 CoroutineContext 类型为代表的上下⽂中,它们被定义在了 Kotlin 的标准库 ⾥. 协程上下⽂是各种不同元素的集合.其中主元素是协程中的 J ...

  7. gost socks5代理

    购买云主机 开放所有tcp端口 配置云主机 https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el8/x86_64/ 选择清华镜像源 [root@i ...

  8. 百度ai只能回答怎么关闭

        百度ai只能回答怎么关闭 要关闭‌百度的AI智能回答功能,可以通过以下几种方法实现: 使用广告拦截插件 安装广告拦截插件:如‌AdGuard.‌uBlock Origin等,这些插件可以帮助你 ...

  9. 可重入锁ReentrantLock

    ReentrantLock 重入锁,是实现Lock 接口 的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁后再次获取不会被阻塞. 要想支持重入 ...

  10. 二叉树遍历Java版(前中后序的递归,迭代,Morris以及两种特殊的先序遍历)

    二叉树的遍历 先序 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode l ...