当前位置:首页 > Web开发 > 正文

array items : 值是一个有效的JSON Schema或者一组有效的JSON Schema

2024-03-31 Web开发

项目有个业务需要对JSON格局的数据校验,需要一些须要字段的验证,实现一个JSON解析器。所以学习了json schema的语法和解析器的实现。
本篇是先说通用的JSON验证,也就是json schema和在java代码中的校验使用。

json schema是什么

json schema实际上就是一个JSON文件,文件内容是对JSON数据的布局及内容的约束,就像是xml文件的xsd文件对xml的验证。

先看一下简单的schema内容

1 { 2 "$schema": "http://json-schema.org/draft-07/schema#", 3 "title": "这是个标题", 4 "description": "校验模板内容json格局", 5 "type": "object", 6 "properties": { 7 "name": { "type": "string" }, 8 "credit_card": { "type": "number" }, 9 "job_arr": { 10 "type": "array", 11 "items": { 12 "type": "string" 13 } 14 }, 15 "billing_address": { 16 "type": "object", 17 "properties": { 18 "selfId": { 19 "type": "string" 20 } 21 } 22 } 23 }, 24 "dependencies": { 25 "credit_card": ["billing_address"] 26 }, 27 "required": ["name"] 28 }

json schema关键字 关键字描述
$schema   暗示该JSON Schema使用的版本规范,非必填,目前最新一版“Draft-07”是2019.09颁布的。每个版本的语法可能有收支,便利以后人员维护建议使用  
title   JSON Schema文件的标题,非必填  
description   JSON Schema文件的描述信息,非必填  
type   待校验元素的类型(例如,最外层的type暗示待校验的是一个JSON东西,内层type分袂暗示待校验的元素类型为,number,string,array,object)  
properties   JSON东西中,各个key-value对中value的限制条件  
required   校验的JSON东西中,必需存在的key,不存在则校验掉败  
typele类型常见的取值

string,object,array,integer(只能是int),number(float或者int),null,boolean

string

maxLength: 校验string字符串的最大长度。超过长度校验掉败。
minLength: 校验string字符串的最小长度。小于长度校验掉败。
pattern: 字符串满足指定的正则表达式,才算通过校验。
format: 不常用,值只能是以下的取值date-time(时间格局)、email(邮件格局)、hostname(网站地点格局)、ipv4、ipv6、uri、uri-reference、uri-template、json-pointer。假如要校验的字符串是邮箱格局的可以使用"forma"t:"email",而不用pattern本身去指定正则表达式。

object

properties: 每个key对应的值,,都是一个json schema,则待校验JSON东西通过校验。从这里,我们可以看到,json schema的校验检测,这个东西才算是通过校验。
required: 值是个字符串数组,数组元素是本级的属性key。该关键字限制了JSON东西中必需包罗哪些本级key。如果固然json不包罗数组中的key则校验掉败。
dependencies: 设置属性依赖,值是一个json schema。例如
"dependencies": {"credit_card":["billing_address"]},
暗示有字段"credit_card"就必需有"billing_address"字段。但是这个依赖是单向的。有"billing_address"字段可以没有"credit_card"。

array

items: 值是一个有效的JSON Schema或者一组有效的JSON Schema。只有待校验JSON数组中的所有元素均通过校验,整个数组才算通过校验。
例如:{"type": "array","items": { "type": "string", "minLength": 5 }} 这个数组只有满足长度大于5才会通过校验
uniqueItems: 值是一个布尔值,即boolean(true、false)。当该关键字的值为true时,只有待校验JSON数组中的所有元素都具有独一性时,才华通过校验。

这里只是简单的列举了一些常用的关键字,如果想要学习更多的使用要领,可以去看下官方文档里面会有更详细的用例。

json schema中文使用教程文档

json schema draft-07版本官方文档

json schema官网

再分享两个链接

使用schema约束验证json数据

在措施中实现对json数据的校验

json schema官网中java语言对json schema的实现方法有三种

everit-org/json-schema draft-07, -06, -04 (Apache License 2.0)

Justify draft-07, -06, -04 (Apache License 2.0)

networknt/json-schema-validator draft-07, -06, -04 Support OpenAPI 3.0 with Jackson parser (Apache License 2.0)

本篇介绍的是第三种---第三方工具feg

导入依赖fge包,因为fge的要领要用到jsonNode,所以也就需要导入jackson的包

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31107.html