背景:
复杂的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