XML有XML Schema,有Schema的好处就是可以校验文件是否符合规范,在代码提示上也会有许多好处。JSON Schema用于JSON验证。
如果说JSON是盛放数据的袋子,那么JSON Schema就是盛放袋子的袋子。
一、类型约束关键字
1、 multipleOf
number类型
2、maximum和exclusiveMuximum
maximum为number类型
exclusiveMuximum为boolean类型,表示是否包括maximum
3、minimum和exclusiveMinimum
minimum为number类型
exclusiveMinimum为boolean类型
4、maxLength和minLength
number类型,用来约束字符串类型的长度
5、pattern
string类型,正则表达式约束字符串类型
6、additionalItems和items
这两个关键字用于约束数组。
additionalItems可为boolean或者object类型
items既可以是object类型,也可以是array类型。如果是object类型,表示数组中各个元素类型相同;如果为object类型,表示数组中有多种类型的元素。
7、minItems和maxItems
number类型,用来限制数组的长度
8、uniqueItems
boolean类型,表示是否禁止数组中元素重复
9、maxProperties和minProperties
number类型,用于限制object包含的属性个数
10、required
数组类型,用于约束object类型,表示必须要出现的属性
11、patternProperties
string类型,用于约束object类型,表示所有属性名称必须满足这个正则表达式
12、additionalProperties
可以为boolean类型或者object类型,表示object的其它属性
13、enum
array类型,用来枚举元素的可取值,可以表示任意类型的元素
14、type
string类型,用来表示元素类型,可取值为六种基本数据类型(number,boolean,string,array,object,null)
15、allOf、oneOf、anyOf、not
这四个元素必须是array类型,array中的元素是一系列的schema(schema其实就是object类型)。
对于数组中的约束:
- allOf要求全部满足
- not表示全部不满足
- oneOf表示只满足一个
- anyOf表示至少满足一个
16、definitions
用来定义类型,从而可以进行引用
{
"type": "array",
"items": { "$ref": "#/definitions/positiveInteger" },
"definitions": {
"positiveInteger": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": true
}
}
}
二、元数据关键字
- title
- description
- default
三、格式关键字
json-schema规范预定义了一系列格式
- datetime
- hostname
- ipv4
- ipv6
- uri
- uriref
四、不同语言有不同的jsonschema验证库
语言 | 程序库 |
---|---|
C | WJElement (LGPLv3) |
Java | json-schema-validator (LGPLv3) |
.NET | Json.NET (MIT) |
ActionScript 3 | Frigga (MIT) |
Haskell | aeson-schema (MIT) |
Python | Jsonschema |
Ruby | autoparse (ASL 2.0); ruby-jsonschema (MIT) |
PHP | php-json-schema (MIT). json-schema (Berkeley) |
JavaScript | Orderly (BSD); JSV; json-schema; Matic (MIT); Dojo; Persevere (modified BSD or AFL 2.0); schema.js. |
前端编辑JSON插件推荐
参考资料
https://tools.ietf.org/html/draft-wright-json-schema-validation-00
http://json-schema.org
一个强大的json编辑插件treema,此库的作者还开发了一款非常流行的程序员游戏:codecraft
http://codecombat.github.io/treema/
JSON-Schema校验工具
http://json-schema-validator.herokuapp.com/