Json Schema简介 (2)

数组的类型特定参数,可以用来限制成员类型是否允许额外成员最小元素个数最大元素个数是否允许元素重复

4.1.1 数组成员类型

关键字: items

可以要求数组内每个成员都是某种类型,通过关键字items实现。下面的Schema要求数组内所有元素都是数值,这时关键字"items"对应一个嵌套的Json Schema,这个Json Schema定义了每个元素应该满足的规范。

{ "type": "array", "items": { "type": "number" } }

[1, 2, 3]

关键字items还可以对应一个数组,这时Json数组内的元素必须与Json Schema内items数组内的每个Schema按位置一一匹配。

{ "type": "array", "items": [ { "type": "number" }, { "type": "string" }] }

[1, "abc"]

4.1.2 数组是否允许额外成员

关键字: additionalItems

当使用了items关键字,并且items关键字对应的是Schema数组,这个限制才起作用。关键字additionalItems规定Json数组内的元素,除了一一匹配items数组内的Schema外,是否还允许多余的元组。当additionalItems为true时,允许额外元素。

{ "type": "array", "items": [ { "type": "number" }, { "type": "string" }], "additionalItems" : true }

[1, "abc", "x"]

4.1.3 数组元素个数

关键字: minItems, maxItems

可以限制数组内元素的个数。

{ "type": "array", "items": { "type": "number" }, "minItems" : 5, "maxItems" : 10 }

[1,2,3,4,5,6]

4.1.4 数组内元素是否必须唯一

关键字: uniqueItems

规定数组内的元素是否必须唯一。

{ "type": "array", "items": { "type": "number" }, "uniqueItems" : true }

[1,2,3,4,5]

4.2 对象

Json对象是最常见的Json数据类型,合法的数据可以是

{ "name": "Froid", "age" : 26, "address" : { "city" : "New York", "country" : "USA" } }

就对象类型而言,最基本的类型限制Schema是

{"type" : "object"}

然而,除了类型外,我们通常需要对其成员做进一步约定。对象的类型特定关键字,大多是为此目的服务的。

4.2.1 成员的Schema

关键字:properties

规定对象各成原所应遵循的Schema。

{ "type": "object",      "properties": {      "name": {"type" : "string"}, "age" : {"type" : "integer"}, "address" : { "type" : "object", "properties" : { "city" : {"type" : "string"}, "country" : {"type" : "string"} } } } }

对于上例中的Schema,合法的data是

{ "name": "Froid", "age" : 26, "address" : { "city" : "New York", "country" : "USA" } }

properties关键字的内容是一个key/value结构的字典,其key对应Json数据中的key,其value是一个嵌套的Json Schema。表示Json数据中key对应的值所应遵守的Json Schema。在上面的例子中,"name"对应的Schema是{"type" : "string"},表示"name"的值必须是一个字符串。在Json数据中,对象可以嵌套,同样在Json Schema中也可以嵌套。如"address"字段,在Json Schema中它的内容是一个嵌套的object类型的Json Schema。

4.2.2 批量定义成员Schema

关键字:patternProperties

与properties一样,但是key通过正则表达式匹配属性名。

{ "type": "object", "patternProperties": { "^S_": { "type": "string" }, "^I_": { "type": "integer" } } }

{"S_1" : "abc"}
{"S_1" : "abc", "I_3" : 1}

4.2.3 必须出现的成员

关键字:required

规定哪些对象成员是必须的。

{ "type": "object",      "properties": {      "name": {"type" : "string"}, "age" : {"type" : "integer"}, }, "required" : ["name"] }

上例中"name"成员是必须的,因此合法的数据可以是

{"name" : "mary", "age" : 26}
{"name" : "mary"}

但缺少"name"则是非法的

{"age" : 26}

4.2.4 成员依赖关系

关键字:dependencies

规定某些成员的依赖成员,不能在依赖成员缺席的情况下单独出现,属于数据完整性方面的约束。

{ "type": "object", "dependencies": { "credit_card": ["billing_address"] } }

dependencies也是一个字典结构,key是Json数据的属性名,value是一个数组,数组内也是Json数据的属性名,表示key必须依赖的其他属性。

上面Json Schema合法的数据可以是

{}
{"billing_address" : "abc"}

但如果有"credit_card"属性,则"billing_address" 属性不能缺席。下面的数据是非法的

{"credit_card": "7389301761239089"}

4.2.5 是否允许额外属性

关键字:additionaProperties

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfsxf.html