使用JSON Schema来验证接口数据
最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式。
如果之前看我写的《使用joi来验证数据模型》 可能会问,为什么不使用JOI,反而使用JSON Schema?因为JOI这个nodejs库,除了验证格式,还带有验证字段关系的功能,库体积相对庞大,而且对于含有嵌套格式的JSON,用JOI来编写验证配置,极为繁琐。JSON Schema清晰简读,用来验证接口数据非常合适。
假设我们有一个期望JSON:
{
	users: [
		{ id: 1, username: "zzbo", }
	]
}
我们理解这个JSON结构如下:
- 这个JSON对象有一个users的属性
 - 这个user属性是一个数组
 - 这个数组里面的元素是一个对象
 - 每一个对象里面包含了两个字段:id(Number),username(String)
 
用JSON Schema来描述这个JSON的结构
{
    "$schema": "http://json-schema.org/draft-04/schema#",
	"type" : "object",
	"properties" : {
		"users" : {
			"type" : "array",
			"items" : {
				"type" : "object",
				"properties" : {
					"id": { "type": "number" },
					"username": { "type" : "string" }
				}
			}
		}
	}
}
描述一个JSON就是这么简单。
如果还嫌编写Shema麻烦,哪位高手来写一个根据JSON自动生成JSON Schema的工具。
DOJO已提供了JSON Schema来验证接口数据的功能:
dojo其实早已经这样干,我们可以借鉴。
// 引入dojo的json schema验证模块
dojo.require("dojox.json.schema");
dojo.ready(function() {
	// 加载指定的schema
	dojo.xhrGet({
		url: 'schema.json',
		handleAs: 'json',
		load: function(schema) {
			// 拉取数据
			dojo.xhrGet({
				url: 'users.json',
				handleAs: 'json',
				load: function(users) {
					// 使用 dojo 的 json schema验证模块来验证
					var result = dojox.json.schema.validate(users, schema);
					console.log(result);
				}
			});
		}
	});
});
如果验证合法则返回true, 否则他会返回一个错误信息:
{
	errors: [
		{
			message: "is missing and not optional",
			property: "users"
		}
	]
	valid: false
}
然而,我们往往会担心数据的某个字段缺失,或者类型不是我们所期望的,然后程序中又疏忽于这些判断。如果我们要打造一个像dojo这样的json schema验证工具,除了validate功能,最好还会有一个fill功能,用于自动填充缺失的字段。
相关资料
使用JSON Schema来验证接口数据的更多相关文章
- Postman使用tv4进行JSON Schema结构验证和断言
		
JSON Scheme简介 对于JSON格式的请求数据或者响应数据,在不同的数据和场景下往往会有一部分动态的值及字段.此时我们可以使用JSON Scheme Validator(JSON结构验证)来验 ...
 - JSON Schema(模式)
		
JSON Schema指的是数据交换中的一种虚拟的“合同”. JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验. JSON Schema是数据接收方额第一道防线,也是数据发送方 ...
 - 利用JSON Schema校验JSON数据格式
		
最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...
 - Json Schema 是什么?
		
本文地址:Json Schema 是什么? 简单说,Json Schema 其实就是一个标准的 Json 串,它以一个 Json 串来描述我们需要的数据规范,并且支持注释以及验证 Json 文档,即我 ...
 - Json.Net使用JSON Schema验证JSON格式【实例】
		
给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...
 - Json.Net使用JSON Schema验证JSON格式
		
Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...
 - 接口数据转json格式
		
接口数据转json格式 function tojson($result, $callback = null){ header('Content-Type:text/html; charset=utf- ...
 - chrome json接口数据 插件
		
chrome json接口数据 插件 JSON-Handle 官网 下载后 地址栏输入 chrome://extensions/ 将下载的文件拖入页面 OK
 - 技术那么多,你想看看JSON Schema的测试吗?
		
目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...
 
随机推荐
- 在filter中使用spring的service bean
			
http://blog.csdn.net/godha/article/details/13025099
 - R常见的几种常见统计图
			
1,向日葵散点图 2,热图 (颜色越深,数值越大) 3,折线图(散点图),绘制散点图集用 paris(data.frame)
 - 从宏观到微观理解coding
			
宏观思维就是对所做事情的整体有一个清晰认识,并知晓我们追求的目标是什么.在理解了整体之后,我们需要针对自己感兴趣部分做深入的了解,这就是所谓的微观思维.古语"不谋全局者,不足谋一域" ...
 - JQuery Mobile入门——设置后退按钮文字(转)
			
http://www.tuicool.com/articles/AZnYVz JQuery Mobile入门——设置后退按钮文字 时间 2013-01-09 20:24:28 CSDN博客原文 h ...
 - WizNote for linux installation
			
源一:没有用处 官网链接http://www.wiznote.com/download-wiznote-for-Linux. 源二:提供了源及安装方法 Fedora 中文社区软件源,具体位置在这里. ...
 - MongoDB数据导入导出成csv或者json
			
1. 从远程数据表拉取数据到本地json文件 mongoexport --host 远程服务器IP --port 远程服务器端口 --username 远程数据库用户名 --password 远程数据 ...
 - ubuntu14.04安装bodhi桌面系统后,unity启动界面改变,如何还原
			
按一下 ctrl + alt + f1 # 出現 tty11. sudo service lxdm stop或sudo /etc/init.d/lxdm stop如果出現錯誤訊息 不理它 繼續2. s ...
 - NGUI 灰化按钮或图标
			
在游戏中某些地方可能需要对按钮进行灰化显示,从而表示不能点击!在网上找了一下有些方法是直接用UITexture+灰化shader去做这件事!另外有些方案写的不太清楚,看不懂!不过也基本都是要使用灰化s ...
 - Spring环境搭建之:导入jar包、配置文件名称及放置位置
			
Spring环境搭建之:导入jar包.配置文件名称及放置位置 现在项目开发中spring框架应用的还是比较多的,自己用的还不太熟练,每次用的时候总配置半天,总有些配置弄错,就找个时间总结以下,方便以后 ...
 - io流导出csv
			
@RequestMapping("/doExport") public void doExport(Model model, @RequestParam(value = " ...