最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式。

如果之前看我写的《使用joi来验证数据模型》 可能会问,为什么不使用JOI,反而使用JSON Schema?因为JOI这个nodejs库,除了验证格式,还带有验证字段关系的功能,库体积相对庞大,而且对于含有嵌套格式的JSON,用JOI来编写验证配置,极为繁琐。JSON Schema清晰简读,用来验证接口数据非常合适。

假设我们有一个期望JSON:

  1. {
  2. users: [
  3. { id: 1, username: "zzbo", }
  4. ]
  5. }

我们理解这个JSON结构如下:

  • 这个JSON对象有一个users的属性
  • 这个user属性是一个数组
  • 这个数组里面的元素是一个对象
  • 每一个对象里面包含了两个字段:id(Number),username(String)

用JSON Schema来描述这个JSON的结构

  1. {
  2. "$schema": "http://json-schema.org/draft-04/schema#",
  3. "type" : "object",
  4. "properties" : {
  5. "users" : {
  6. "type" : "array",
  7. "items" : {
  8. "type" : "object",
  9. "properties" : {
  10. "id": { "type": "number" },
  11. "username": { "type" : "string" }
  12. }
  13. }
  14. }
  15. }
  16. }

描述一个JSON就是这么简单。

如果还嫌编写Shema麻烦,哪位高手来写一个根据JSON自动生成JSON Schema的工具。

DOJO已提供了JSON Schema来验证接口数据的功能:

dojo其实早已经这样干,我们可以借鉴。

  1. // 引入dojo的json schema验证模块
  2. dojo.require("dojox.json.schema");
  3. dojo.ready(function() {
  4. // 加载指定的schema
  5. dojo.xhrGet({
  6. url: 'schema.json',
  7. handleAs: 'json',
  8. load: function(schema) {
  9. // 拉取数据
  10. dojo.xhrGet({
  11. url: 'users.json',
  12. handleAs: 'json',
  13. load: function(users) {
  14. // 使用 dojo 的 json schema验证模块来验证
  15. var result = dojox.json.schema.validate(users, schema);
  16. console.log(result);
  17. }
  18. });
  19. }
  20. });
  21. });

如果验证合法则返回true, 否则他会返回一个错误信息:

  1. {
  2. errors: [
  3. {
  4. message: "is missing and not optional",
  5. property: "users"
  6. }
  7. ]
  8. valid: false
  9. }

然而,我们往往会担心数据的某个字段缺失,或者类型不是我们所期望的,然后程序中又疏忽于这些判断。如果我们要打造一个像dojo这样的json schema验证工具,除了validate功能,最好还会有一个fill功能,用于自动填充缺失的字段。

相关资料

JSON Schema 规范

使用JSON Schema来验证接口数据的更多相关文章

  1. Postman使用tv4进行JSON Schema结构验证和断言

    JSON Scheme简介 对于JSON格式的请求数据或者响应数据,在不同的数据和场景下往往会有一部分动态的值及字段.此时我们可以使用JSON Scheme Validator(JSON结构验证)来验 ...

  2. JSON Schema(模式)

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

  3. 利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...

  4. Json Schema 是什么?

    本文地址:Json Schema 是什么? 简单说,Json Schema 其实就是一个标准的 Json 串,它以一个 Json 串来描述我们需要的数据规范,并且支持注释以及验证 Json 文档,即我 ...

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

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

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

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

  7. 接口数据转json格式

    接口数据转json格式 function tojson($result, $callback = null){ header('Content-Type:text/html; charset=utf- ...

  8. chrome json接口数据 插件

    chrome json接口数据 插件 JSON-Handle 官网 下载后 地址栏输入 chrome://extensions/ 将下载的文件拖入页面 OK

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

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

随机推荐

  1. Java NIO教程 目录

    "Java NIO系列教程" 是笔者hans为NIO的初学者编写的一份入门教程,想仔细学习的同学可以按照顺序去阅读.由于我学的也不是特别的精,所以错误.疏漏在所难免,希望同学们指正 ...

  2. 修改Shp文件名称

    IWorkspaceFactory factory = new ShapefileWorkspaceFactoryClass(); IWorkspace pworkspace = factory.Op ...

  3. cocos2d-x学习

    http://www.cocos2d-x.org/wiki/How_to_Start_A_New_Cocos2D-X_Game Cocos2d-x版本:cocos2d-x-3.6 一.设置脚本参数 1 ...

  4. fedora23 tweak tool不工作解决方案

    在启动器中打开 优化工具 失败 在终端中开启显示 Traceback (most recent call last): File "/usr/bin/gnome-tweak-tool&quo ...

  5. SQL Server 2012 通用分页存储过程

    创建存储过程: USE [数据库名] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCedure [dbo].[Split ...

  6. nignx软件安装与调试

    1.通过yum或下载相应软件包安装nginx所需要的辅助软件:pcre.pcre-devel.openssl.openssl-devel.make.gcc.gcc+ 2.解压已经下载好的nginx软件 ...

  7. 深度学习(dropout)

    other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...

  8. jQuery Mobile 可折叠

    可折叠的内容块 可折叠(Collapsibles)允许您隐藏或显示内容 - 对于存储部分信息很有用. 如需创建可折叠的内容块,请向某个容器分配 data-role="collapsible& ...

  9. 微信App支付通知验签

    微信异步通知: [AcceptVerbs("POST")] public void Notify() { //编码(101-登录无效,102-账号无效,200-成功,201-失败, ...

  10. js实例:验证只能输入数字和一个小数点

    分享一个javascript脚本代码,用于验证只能输入数字和一个小数点,检测数字输入是否符合要求,效果不错,有用到的朋友拿去吧. 原文地址:http://www.jbxue.com/article/1 ...