Json schema

本文介绍了JSON Schema在处理复杂AJAX应用程序验证中的作用,对比了JavaScript中的dojox.json.schema和JSV库的使用、性能,并探讨了Java中fge和everit的JSON Schema库的优缺点及性能测试结果。在JavaScript中,dojox.json.schema执行更快,而Java的everit库性能显著优于fge。
摘要由CSDN通过智能技术生成

背景:

复杂的AJAX应用程序可以与数百个不同的JSON服务进行交互,因此,引入对客户端验证的需求。

在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类:

* 
    * 判断数据是否已被正确格式化
    * 手动检查形式有误的数据并尝试纠正
    * 手动检查形式有误的数据并将有误数据丢弃
    * 自动检查形式有误的数据

在这里只讨论自动校验方面的可用工具包中的json schema,son schema项目首页:http://json-schema.org/

JSON schema是一个帮助你定义、校验甚至是修复json数据格式的解决方案。它定义了一整套规则,允许我们通过定义一个schema(本身也是JSON)来描述一个JSON串的数据格式。它有如下优点:

* 描述你现有的JSON数据的格式;
* 清晰的、人类/机器可读的文档结构;
* 完全的结构校验,尤其适用于 自动测试 或 验证客户端提交的数据格式。

下面为一个定位信息的json schema例子

//json传输值
{
  "data" : {
    "id" : 851,
    "detail" : "琴千线长征路-万盛南路附近",
    "area" : 9480,
    "province" : "浙江省",
    "parentArea" : 2819,
    "lng" : 120.32438,
    "district" : "东阳市",
    "lat" : 29.136176,
    "city" : "金华"
  }
}
//定位接口返回值的JSON schema
{
  "type" : "object",
  "properties" : {
    "data" : {
      "type" : "object",
      "properties" : {
        "id" : {
          "type" : "integer",
          "minimum": 0
        },
        "detail" : {
          "type" : "string"
        },
        "area" : {
          "type" : "integer"
        },
        "province" : {
          "type" : "string",
          "pattern" : "^(北京市|天津市|....|浙江省)$"
        },
        "parentArea" : {
          "type" : "integer"
        },
        "lng" : {
          "type" : "number",
          "minimum" : 73,
          "maximum" : 135
        },
        "district" : {
          "type" : "string"
        },
        "lat" : {
          "type" : "number",
          "minimum" : 4,
          "maximum" : 54
        },
        "city" : {
          "type" : "string"
        }
      },
      "required" : [
        "id",
        "detail",
        "area",
        "province",
        "parentArea",
        "lng",
        "district",
        "lat",
        "city"
      ]
    }
  },
  "required" : [
    "data"
  ]
}

可以看出:
1、json schema 本身也是一个json串

2、每个schema可以描述一个json实例,并且该json实例里每一个节点都可以用一个schema来描述,因此schema与json一样,本身也是一个层级结构,一个schema中可能嵌套着另外若干层schema

3、json schema 定义的检查规则以数据格式验证为主(字段存在性、字段类型),并可以支持一些简单的数据正确性验证(例如数值范围、字符串的模式等),但不能进行复杂的逻辑校验(例如进价必须小于售价等)。

JS JSON Schema库

表1中简要概述了4个JSON Schema库的特性

表 1. 针对 JavaScript 的 JSON Schema

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值