本文地址:Json Schema 是什么?

简单说,Json Schema 其实就是一个标准的 Json 串,它以一个 Json 串来描述我们需要的数据规范,并且支持注释以及验证 Json 文档,即我们可以用 Json Schema 来验证所给的 Json 串是否满足我们需要的数据格式规范。

同样能用来表示数据的还有一种格式 XML,为什么 Json Schema 偏偏要用 Json 来进行表示数据呢?对于机器,其实这两种方式是没有区别的,机器只要你把标准给了它,它都能用很快的速度识别出来(相对于我们人),但是 XML 对于人识别就太不友好了。比如,假设我们需要描述一个班级的两个人:

对于 XML:

<class>
<name>实验1班</name>
<no>1801</no>
<students>
<student>
<name>张三</name>
<sex>女</sex>
</student>
<student>
<name>李四</name>
<sex>男</sex>
</student>
</students>
</class>

使用 Json:

{
"class": {
"name": "实验1班",
"no": "1801",
"students": {
"student": [
{
"name": "张三",
"sex": "女"
},
{
"name": "李四",
"sex": "男"
}
]
}
}
}

有没有觉得 Json 立马秒杀 XML?这里可能感觉还不是很明显,这是因为层级比较少,层级再多之后,Json 的优势立马就显现出来了。

Json Schema 在我们平时的工作中最常用的有两个,一个就是上面说的用于验证 Json 串的合法性;另一个就是用于定义我们的 API,定义好 API 后,我们可以直接用工具生成我们的 API,这样利于我们对 API 的维护。

验证 Json 串的合法性

比如,我们定义的 Json Schema 为:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for a product",
"type": "integer"
},
"name": {
"description": "Name of the product",
"type": "string"
},
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
},
"required": ["id", "name", "price"]
}

在上述 Json Schema 中

  • 最上面的 $shcema 是一个关键字,它表示我们所定义的 Schema 和 http://json-schema.org/draft-04/schema#(Json Schema 的 v4 规范)是一致的
  • title 指的是标题。
  • description 用于描述我们所定义的 Schema,上述表明我们定义的是一个来自 Acme 目录的商品。
  • type 表示我们定义的是一个 object 对象。
  • properties 中就是 Schema 的属性了,这里面的是核心。我们可以看到该 Schema 一共有三个属性,分别是 id(integer), name(string), prince(number)
  • 最后的 required 表明三个属性都是必须的。

给定了上述 Schema,我们就可以验证给定的 Json 是否是合规的了。比如:

{
"id": 1,
"name": "watermelon"
}

显然,这个 Json 缺少了一个属性 price,所以它不合规。

{
"id": 1,
"name": ["knife", "spoon"],
"price": 4
}

这个 Json 的 name 属性是一个数组,我们上面规定 name 只能是 String,显然这个也不是合规的。

{
"id": 1,
"name": "watermelon",
"price": 4
}

这个,就满足了上面定义的所有规则,因此这个是一个合规的 Json。

定义 API

其实,使用我们上面的 Json Schema 便能进行 API 的定义了,只不过是定义 API 的话可能还需要更多的支持。比如,对于 Java,我们需要能实现 extend 等关键字的支持,还需要能进行枚举 enum 类型等的定义。这里只简单使用上述的内容显然不够了,我们还需要扩充一些关键字的使用。

目前,大家使用最多的将 Json Schema 转换为 Java Bean 的一个库是 jsonschema2pojo,后面我将依托这个库支持的内容对 Json Schema 的格式进行深入解析,此库支持的也是比较通用的。

Json Schema 是什么?的更多相关文章

  1. 使用JSON Schema来验证接口数据

    最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...

  2. 技术那么多,你想看看JSON Schema的测试吗?

    目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...

  3. Json.Net使用JSON Schema验证JSON格式【实例】

    给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...

  4. Json.Net使用JSON Schema验证JSON格式

    Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...

  5. JSON Schema 校验实例

    JSON Schema 简介 JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. ...

  6. Json Schema的使用

    直接上案例: 在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法. 服务端是使用Json.net(n ...

  7. Json Schema简介

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

  8. json schema校验

    工作中使用到了json schema格式校验的问题,在网上查了些资料,结合自己的理解记录一下. json schema可以对json结果字符串做出一些约束,例如: 1. 值类型是:array, obj ...

  9. JSON Schema(模式)

    JSON Schema指的是数据交换中的一种虚拟的“合同”. JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验. JSON Schema是数据接收方额第一道防线,也是数据发送方 ...

  10. rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)

    rest-assured从2.1.0版本开始支持  Schema 验证,包括JSON Schema validation及Xml Schema validation.我们之前断言响应体都是一个一个字段 ...

随机推荐

  1. PMP过程组与知识领域

    过程组知识领域 启动 规划 执行 监控 结尾 整合管理 制定项目章程 制定项目计划 指导与管理项目工作 监控项目工作 结束项目过程或阶段 项目管理知识 实施整体变更控制 范围管理 规划范围管理 确认范 ...

  2. Vlookup大叔早已油腻(Excel函数集团)

    1.Vlookup基础用法:https://mp.weixin.qq.com/s/0JRytWlBD-KYM2jkecG2rA 2.合并字符串:https://mp.weixin.qq.com/s/9 ...

  3. CF984B Minesweeper 题解

    Content 有一个 \(n\times m\) 的扫雷地图,请判断这个地图是否合法,即对于所有格子,是否满足: 对应点的数字周围必须有对应数字个雷 空的地方周围没有雷 数据范围:\(1\leqsl ...

  4. Linux 输入指令显示 command not found(未找到命令)解决办法

    问题摘要:当我在linux中安装了一个Nginx,最后需要检查是否安装成功的时候,输入了Nginx -v 提示未找到命令(服务器中英文提示为 command not found) 其他软件命令未找到问 ...

  5. .NET 云原生架构师训练营(对象过程建模)--学习笔记

    目录 UML OPM OPM优化 UML 1997年发布UML标准 主要域 视图 图 主要概念 结构 静态视图 类图 类.关联.泛化.依赖关系.实现.接口 用例视图 用例图 用例.参与者.关联.扩展. ...

  6. git clone 报错:SSL certificate prob lem: self signed certificate

    先执行: git config --global http.sslVerify false 然后重新执行git clone 命令即可

  7. redis启动报错:Fatal error loading the DB: Invalid argument

    redis启动报错 add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be ...

  8. windows10下vscode+cmake编译Qt5代码

    概述 本文演示环境: windows10 cmake version:3.18 qt version: 5.14 vscode version: 1.54.1 本文演示环境基于在线模式, 离线使用VS ...

  9. 【LeetCode】1014. Capacity To Ship Packages Within D Days 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】747. Largest Number At Least Twice of Others 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 寻找两次最大值 排序 大顶堆 日期 题目地址:htt ...