JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范。
现在,RESTful接口和JSON大行其道,我们可以把JSON直接存储到数据库中,提供了比原先的关系表更容易扩展的能力(虽然JSON串的存储仍然用到了关系表)。RESTful接口直接返回JSON数据,比返回xml更加简洁和易读。xml中可以有xml schema对xml数据进行定义和校验,同样的,JSON中也有相应的叫做JSON schema的机制,来对JSON数据进行描述和定义,并且提供了相应的机制来检验某个JSON字符串是否符合JSON schema的定义。
解析软件:
- Python
https://github.com/Julian/jsonschema
https://github.com/zyga/json-schema-validator
- Online
http://jsonschemalint.com/
我们来看一下可以用于这一模式中的各种重要关键字:
关键字 | 描述 |
---|---|
$schema | $schema 关键字状态,表示这个模式与v4规范草案书写一致。 |
title | 用它给我们的模式提供了标题。 |
description | 关于模式的描述。 |
type | type 关键字在我们的JSON数据上定义了第一个约束:必须是一个JSON对象。 |
properties | 定义各种键和他们的值类型,以及用于JSON文件中的最小值和最大值。 |
required | 存放必要属性列表。 |
minimum | 给值设置的约束条件,表示可以接受的最小值。 |
exclusiveMinimum | 如果存在”exclusiveMinimum”并且具有布尔值true,如果它严格意义上大于”minimum”的值则实例有效。 |
maximum | 给值设置的约束条件,表示可以接受的最大值。 |
exclusiveMaximum | 如果存在”exclusiveMinimum”并且具有布尔值true,如果它严格意义上小于”maximum” 的值则实例有效。 |
multipleOf | 如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠”multipleOf”的数字实例是有效的。 |
maxLength | 字符串实例字符的最大长度数值。 |
minLength | 字符串实例字符的最小长度数值。 |
pattern | 如果正则表达式匹配实例成功则字符串实例被认为是有效的。 |
测试json
[
{
"id": 2,
"name": "An ice sculpture",
"price": 12.50
},
{
"id": 3,
"name": "A blue mouse",
"price": 25.50
}
]
json模式示例
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for a product",
"type": "integer"
},
"name": {
"description": "Name of the product",
"type": "string"
},
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
},
"required": ["id", "name", "price"]
}
}