JSON 知识量:10 - 17 - 48
Schema意为模式,模式用于树立一个标准,用于判断数据或程序是否符合要求。在数据传输过程中,应当在数据发送前通过模式对数据进行验证,以避免出现接收方认为数据不合法或不可用的麻烦。而且,数据接收方也可以使用模式来验证数据是否正确和安全传输。
JSON Schema就像数据交换中的一种“虚拟合同”,它可以位于要接收数据的第一行,以保证数据符合要求。它可以在数据被处理前回答以下问题:
值的数据类型是否正确。可以具体规定一个值是数字、字符串等类型。
是否包含所需要的数据。可以具体规定哪些数据是需要的,哪些是不需要的。
值的形式是不是需要的。可以指定值的范围、最小值和最大值。
JSON Schema使用JSON来书写,要求如下:
1、首先,需要在JSON第一个名称-值对中,声明其为一个schema文件。例如:
{ "$schema": "http://json-schema.org/draft-04/schema#" }
其中,声明的名称必须为"$schema",值必须为所用草拟版本的链接。
2、第二个名称-值对应该是JSON Schema文件的标题(title)。例如:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Car" }
3、第三个名称-值对定义需要在JSON中包含的属性(properties)。属性值实质上是我们想要的JSON的名称-值对的骨架。通过使用一个对象来定义数据类型,并有选择的进行描述。例如:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Car", "properties": { "name": { "type": "string" }, "years": { "type": "number" }, "color": { "type": "string" }, "isReady": { "type": "boolean" } } }
上面代码中的type定义了数据的类型要求。以下JSON对象就可以符合上面的schema。
{ "name": "BMW", "years": 2018, "color": "black", "isReady": true }
上面定义的JSON Schema解决了数据类型检测问题,但是如果想要解决哪些数据是必选的,哪些是可选的,就需要在模式中增加一个名词-值对:required,然后将必选的数据名称以数组元素的形式添加到required的值中。例如:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Car", "properties": { "name": { "type": "string" }, "years": { "type": "number" }, "color": { "type": "string" }, "isReady": { "type": "boolean" } }, "required": [ "name", "years", "color" ] }
以上模式中,required表示的意思是:name、years和color是必选的数据内容,而剩下的isReady则是可选的。
特别需要注意的是:如果一个模式中没有required名称-值对,那么将不会有必选项,空JSON对象也将被认为是合法的。
最后一个问题,如何设置值的范围、最小值和最大值,以确保值的形式是我们期望的,办法就是通过特定的名称-值对添加更多的条件约束。例如:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Car", "properties": { "name": { "type": "string", "minLength": 5, "maxLength": 20 }, "years": { "type": "number", "minimum": 2000 }, "color": { "type": "string" }, "isReady": { "type": "boolean" } }, "required": [ "name", "years", "color" ] }
以上模式中,为属性name设置了最小长度(minLength)5,最大长度(maxLength)20。为属性years设置了最小量2000。
JSON Schema还支持正则表达式以及枚举类型,如果要深入学习可以访问JSON Schema主页(http://json-schema.org/)。
专业术语:
JSON Schema:数据交换中的一种“虚拟合同”。
重要概念:
JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验。
JSON Schema是数据接收方的第一道防线,也是数据发送方节约时间、保证数据正确的好工具。
JSON Schema可以解决一致性验证问题:1、值的数据类型是否正确。2、是否包含所需要的数据。3、值的形式是不是我需要的。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6