iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >java如何校验json的格式
  • 477
分享到

java如何校验json的格式

2023-07-06 12:07:40 477人浏览 薄情痞子
摘要

这篇文章主要介绍“java如何校验JSON的格式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java如何校验json的格式”文章能帮助大家解决问题。JSON SchemaJSON Schema 是

这篇文章主要介绍“java如何校验JSON的格式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java如何校验json的格式”文章能帮助大家解决问题。

JSON Schema

JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema可以理解为模式或者规则。

Json Schema定义了一套词汇和规则,这套词汇和规则用来定义Json元数据,且元数据也是通过Json数据形式表达的。Json元数据定义了Json数据需要满足的规范,规范包括成员、结构、类型、约束等。

JSON Schema 就是json的格式描述、定义、模板,有了他就可以生成任何符合要求的json数据

json-schema-validator

在java中,对json数据格式的校验,使用 json-schema-validator,具体实例如下:

1. 引入依赖
        <dependency>            <groupId>com.GitHub.fge</groupId>            <artifactId>json-schema-validator</artifactId>            <version>2.2.6</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>2.3.0</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>2.3.0</version>        </dependency>

jackson-corejackson-core 是必须要引入的,他们为 json-schema-validator 必须的

2. 编写schema

如果我们要校验的数据格式如下:

{    "data": [        {            "sex": "男",            "name": "王小明",            "age": 18        },        {            "sex": "女",            "name": "王小红",            "age": 17        }    ],    "type": "human"}

外面是type和data,里面是一个数组,数组属性包括sex、name、age

编写schema文件

{    "type": "object",    "properties": {        "type": {            "type": "string"        },        "data": {            "type": "array",            "items": {                "type": "object",                "properties": {                    "name": {                        "type": "string",                        "maxLength": 3                    },                    "sex": {                        "enum": [                            "男",                            "女"                        ]                    },                    "age": {                        "type": "number"                    }                },                "required": [                    "name",                    "sex",                    "age"                ]            }        }    },    "required": [        "type",        "data"    ]}

以上json描述了目标json的数据格式,外层必须字段type、data,里面限制了name的最大长度 maxLength 为3,sex 为枚举值,只可取 男、女两个字符串,age 为number类型。

3. 代码实现
public Map validatorJsonUnchecked(String body) {        Map<String, String> map = new HashMap<>();        String filePath = "validator" + File.separator + "validator.json";        ObjectMapper objectMapper = new ObjectMapper();        try {            Jsonnode jsonNodeSchema = objectMapper.readTree(ResourceUtil.readUtf8Str(filePath));            JsonNode jsonNode = objectMapper.readTree(body);            ProcessingReport processingReport = JsonSchemaFactory.byDefault().getValidator().validate(jsonNodeSchema, jsonNode, true);            if (!processingReport.isSuccess()) {                processingReport.forEach(processingMessage -> {                    JsonNode missing = processingMessage.asJson().get("missing");                    String keyWord = processingMessage.asJson().get("keyword").asText();                    // 如果缺失字段                    if (!Objects.isNull(missing)) {                        missing.forEach(miss -> {                            String text = miss.asText();                            map.put(text, text + " 字段缺失");                        });                        // 如果字段超长                    } else if ("maxLength".equals(keyword)) {                        String field = processingMessage.asJson().get("instance").get("pointer").asText();                        String value = processingMessage.asJson().get("value").asText();                        field = field.substring(field.lastIndexOf("/") + 1);                        map.put(field, value + " 字段长度过长");                        // 如果不在枚举范围内                    } else if ("enum".equals(keyword)) {                        String field = processingMessage.asJson().get("instance").get("pointer").asText();                        String value = processingMessage.asJson().get("value").asText();                        field = field.substring(field.lastIndexOf("/") + 1);                        map.put(field, field + "字段值错误," + value + "不在枚举范围内");                    } else if ("type".equals(keyword)) {                        String field = processingMessage.asJson().get("instance").get("pointer").asText();                        String found = processingMessage.asJson().get("found").asText();                        String expected = processingMessage.asJson().get("expected").toString();                        field = field.substring(field.lastIndexOf("/") + 1);                        map.put(field, field + " 类型错误,现有类型: " + found + ", 预期类型:" + expected);                    }                });            }        } catch (IOException | ProcessingException e) {            log.error("校验json格式异常", e);        }        return map;    }

以上代码首先获取了 要校验的json的标准文件 validator.json,然后调用 JsonSchemaFactory.byDefault().getValidator().validate(jsonNodeSchema, jsonNode, true) 方法对传进来的json 进行了校验,这里 true 的意思是深度检查,如果没有这个参数,校验json的时候遇到第一个错误,就直接返回了

接下来构建测试方法

    public static void main(String[] args) {        ValidatorService validatorService = new ValidatorServiceImpl();        Map<String, Object> body = new HashMap<>();        HashMap<String, Object> one = new HashMap<String, Object>() {{            put("name", "王小明");            put("sex", "男");            put("age", 18);        }};        HashMap<String, Object> two = new HashMap<String, Object>() {{            put("name", "王小明1");            put("sex", "未知");            put("age", "18");        }};        body.put("type", "human");        body.put("data", Arrays.asList(one,two));        Map map = validatorService.validatorJsonUnchecked(JSONUtil.toJsonStr(body));        System.out.println(map);    }
4. 执行结果

{sex=sex字段值错误,未知不在枚举范围内, name=王小明1 字段长度过长, age=age 类型错误,现有类型: string, 预期类型:["integer","number"]}

5. 整理总结

如果schema 编写的时候,对列表使用了中括号 [],那么当校验的时候只会校验数组中的第一个,这是一个坑,如下

{    "type": "object",    "properties": {        "type": {            "type": "string"        },        "data": {            "type": "array",            "items": [                {                    "type": "object",                    "properties": {                        "name": {                            "type": "string",                            "maxLength": 3                        },                        "sex": {                            "enum": [                                "男",                                "女"                            ]                        },                        "age": {                            "type": "number"                        }                    },                    "required": [                        "name",                        "sex",                        "age"                    ]                }            ]        }    },    "required": [        "type",        "data"    ]}

如果是这样的话,只会校验 data 数组的第一条数据,其他的有错误也不会报错!!

关于“java如何校验json的格式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: java如何校验json的格式

本文链接: https://www.lsjlt.com/news/358156.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何校验json的格式
    这篇文章主要介绍“java如何校验json的格式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java如何校验json的格式”文章能帮助大家解决问题。JSON SchemaJSON Schema 是...
    99+
    2023-07-06
  • Java 4种校验注解(值校验、范围校验、长度校验、格式校验)
    1 值校验 1.1 @NotNull注解 被注解的元素必须不为空,一般用于数值类型的参数校验 @NotNull(message = "用户编号不能为空") private Integer userId; 2 @NotBlank注解 验证注解...
    99+
    2023-08-31
    java 开发语言
  • java校验json的格式是否符合要求的操作方法
    目录JSON Schemajson-schema-validator1. 引入依赖2. 编写schema3. 代码实现4. 执行结果5. 整理总结参考文档在日常开发过程中,会有这样的...
    99+
    2023-05-17
    java校验json格式 java json格式校验
  • Golang校验字符串是否JSON格式的方法总结
    目录json.Validjson.Valid方法源码使用一个示例来看检测过程json-validator-go开发json-validator-go工具原因json-validato...
    99+
    2023-05-18
    Golang校验字符串是否JSON格式 Golang校验字符串 Golang 字符串 JSON格式
  • JavaScript如何实现校验Number(4,1)格式的数字
    小编给大家分享一下JavaScript如何实现校验Number(4,1)格式的数字,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!...
    99+
    2024-04-02
  • springboot参数格式怎么校验
    这篇文章主要介绍“springboot参数格式怎么校验”,在日常操作中,相信很多人在springboot参数格式怎么校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot参数格式怎么校验”的疑...
    99+
    2023-06-08
  • springboot 参数格式校验操作
    springboot 参数格式校验 @Validated 字面意思校验 @RequestBody 该注解不用多说,意思是接收为json格式的参数 @Validated 字面意...
    99+
    2024-04-02
  • springboot 中怎么校验参数格式
    本篇文章给大家分享的是有关springboot 中怎么校验参数格式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。springboot 参数格式校验@Validated 字面意思...
    99+
    2023-06-20
  • json如何格式化
    Python中可以使用json模块来格式化JSON数据,使用json.loads()函数解析原始的JSON数据,并使用json.dumps()函数将解析后的数据格式化为带缩进的字符串即可。 在Python中,可以使用json模块...
    99+
    2024-01-22
    json格式化 json
  • C#校验时间格式的场景分析
    目录前言:场景描述前戏一前戏二正戏尾戏前言: 晚上打算睡觉的时候,群里反馈订单接收失败,开工排查问题,日志显示验签失败,发现一个蛮有意思的BUG,总算有了一个写作的素材 场景描述 本...
    99+
    2022-11-13
    C#校验时间格式 C#时间格式
  • .NET Core中简单的邮箱格式校验方式
    目录IntroImplementMoreReferences总结Intro 前段时间有一个验证邮箱格式的小需求,然后突然发现了一种非常简单的邮箱格式判断方式 Implement 直接...
    99+
    2024-04-02
  • idea如何格式化json
    要格式化JSON,可以使用Python的json库来实现。以下是一个例子:```pythonimport jsonjson_data...
    99+
    2023-09-01
    idea json
  • SpringBoot中@Pattern注解对时间格式校验方式
    目录SpringBoot @Pattern注解对时间格式校验1.需求背景2.实现案例@Pattern的用法下面是常用的正则表达式SpringBoot @Pattern注解对时间格式校...
    99+
    2024-04-02
  • ultraedit如何查看json格式
    这篇文章主要介绍了ultraedit如何查看json格式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ultraedit如何查看json格式文章都会有所收获,下面我们一起来看看吧。ultraedit查看json...
    99+
    2023-07-01
  • golang如何处理JSON格式
    这篇文章主要讲解了“golang如何处理JSON格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang如何处理JSON格式”吧!首先,我们需要了解一些Golang中有关JSON的基础...
    99+
    2023-07-05
  • jQuery中校验时间格式的正则表达式小结
    代码中用到了jQuery,传入的参数是jQuery选择的input对象.原理:先用正则匹配,再提取时分秒,看其是否在正常的范围内。 复制代码 代码如下:function checkT...
    99+
    2022-11-15
    校验时间
  • mongodb如何存储json格式
    在MongoDB中,可以使用BSON(Binary JSON)格式来存储JSON数据。BSON是MongoDB使用的一种二进制编码格...
    99+
    2023-09-01
    mongodb json
  • 如何把xml格式数据转成json格式?
    xml格式数据转json格式 导入json依赖 //导入maven依赖 org.json json 20220320 传入需要转换的xml,返回对应的jso...
    99+
    2023-08-24
    json xml java
  • Java如何实现优雅的参数校验
    这篇文章主要介绍“Java如何实现优雅的参数校验”,在日常操作中,相信很多人在Java如何实现优雅的参数校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现优雅的参数校验”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • 如何利用Java正则表达式校验密码规则
    目录密码规则:正则表达式使用方法:补充:java正则校验密码总结密码规则: 它至少包含 8 个字符,最多包含 20 个字符。它至少包含一个数字。它至少包含一个大写字母。它至少包含一个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作