JSON

JSON 知识量:10 - 17 - 48

4.1 模式><

模式与验证- 4.1.1 -

Schema意为模式,模式用于树立一个标准,用于判断数据或程序是否符合要求。在数据传输过程中,应当在数据发送前通过模式对数据进行验证,以避免出现接收方认为数据不合法或不可用的麻烦。而且,数据接收方也可以使用模式来验证数据是否正确和安全传输。

JSON Schema就像数据交换中的一种“虚拟合同”,它可以位于要接收数据的第一行,以保证数据符合要求。它可以在数据被处理前回答以下问题:

  • 值的数据类型是否正确。可以具体规定一个值是数字、字符串等类型。

  • 是否包含所需要的数据。可以具体规定哪些数据是需要的,哪些是不需要的。

  • 值的形式是不是需要的。可以指定值的范围、最小值和最大值。

JSON Schema简介- 4.1.2 -

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/)。

专业术语和重要概念- 4.1.3 -

专业术语:

  • JSON Schema:数据交换中的一种“虚拟合同”。

重要概念:

  • JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验。

  • JSON Schema是数据接收方的第一道防线,也是数据发送方节约时间、保证数据正确的好工具。

  • JSON Schema可以解决一致性验证问题:1、值的数据类型是否正确。2、是否包含所需要的数据。3、值的形式是不是我需要的。