本文地址: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. LuoguP7080 [NWRRC2013]Ballot Analyzing Device 题解

    Content 有 \(n\) 名选手参加一个比赛,有 \(m\) 个人为他们投票.第 \(i\) 个人的投票情况用一个长度为 \(n\),并且仅包含 . 和 X 两个字符的字符串,其中,如果第 \( ...

  2. Tornado 异步浅解

    7.1 认识异步 1. 同步 我们用两个函数来模拟两个客户端请求,并依次进行处理: #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 202 ...

  3. 【LeetCode】231. Power of Two 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二进制 位运算 判断是不是最大2的幂的因数 判断因子 ...

  4. 【九度OJ】题目1012:畅通工程 解题报告

    [九度OJ]题目1012:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1012 题目描述: 某省调查城镇交通状况 ...

  5. 【LeetCode】125. Valid Palindrome 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 列表生成式 正则表达式 双指针 日期 题目地址:https:/ ...

  6. 【剑指Offer】52. 两个链表的第一个公共节点 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:栈 方法二:HashSet 方法三:不使用额外空间 日期 ...

  7. YAPTCHA(hdu2973)

    YAPTCHA Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. Buy Tickets(poj2828)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 17416   Accepted: 8646 Desc ...

  9. python极简教程01:基础变量

    测试奇谭,BUG不见. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的教程,他们同大多数自学编程语言的人一样,无外乎遇到以下这些问题: 网络上的资料过多且良莠不全,不知道如 ...

  10. CS5263替代PS176|设计DP1.4转HDMI2.0音视频转换线方案|PS176方案

    PS176是一个显示端口 (DP)至HDMI 2.0视频接口转换器适用于需要视频协议转换的电缆适配器.电视接收器.监视器和其他应用.它将接受任何显示端口输入格式,包括DP 1.1a.dp1.2a.dp ...