簡介
Json Schema就是用來定義json數據約束的一個標準。根據這個約定模式,交換數據的雙方可以理解json數據的要求和約束,也可以據此對數據進行驗證,保證數據交換的正確性(通俗來講:描述或者驗證數據格式)。
Jsonschema的特性和用途:
- 用於描述數據結構
描述json數據時,如果數據本身的複雜度很高,高到三維四維,普通的標籤函數已經無法表示這種層級結構,而Jsonschema利用object和array字段類型的反覆嵌套,可以規避掉這個缺陷。
- 用於構建人機可讀的文檔
Jsonschema是自描述的,它本身就是一份很完善的說明文檔,字段的說明、格式的要求等清晰明瞭。
- 用於校驗數據
通過描述接口入參和出參,進行數據校驗,保證兩方數據一致。
項目應用
例如:在自動化測試中,校驗接口的出參就用到jsonschema,用來校驗得到的json字符串的數據類型是否與預期一致,如下爲一個jsonschema實例:
schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "some information about this",
"type": "object",
"required": [
"sdkcorev", "price"
],
"properties": {
"sdkcorev": {
"type": "string",
"minLength": 3,
"maxLength": 30
},
"price": {
"type": "number",
"multipleOf": 0.5, #能夠被0.5整除
# 這裏沒有取等,5.0<price<99999.0
"minimum": 5.0,
"maximum": 99999.0,
# 若使用下面這兩個關鍵字則 5.0<=price<=99999.0
# "exclusiveMinimum": 5.0,
# "exclusiveMaximum": 99999.0
},
"tags": {
"type": "array",
"items": [
{
"type": "string",
"minLength": 2,
"maxLength": 8
},
],
"additonalItems": {
"type": "string",
"miniLength": 2
},
"miniItems": 1,
"maxItems": 5,
"uniqueItems": True
},
"coding": {
"type": "string",
"pattern": "^[A-Z]+[a-zA-Z0-9]{12}$"
},
"other": {
"type": "object",
"properties": {
"info1": {
"type": "string"
},
}
}
},
"minProperties": 3, #最小屬性個數
"maxProperties": 7, #最大屬性個數
}
此實例便對接口返回的json字段進行了詳細校驗
1. 結構語法:
字段最好不要有’_’下劃線分隔
$schema:說明是用了哪一個草案進行校驗(可省略)
description:描述信息(可省略)
type:需要校驗的對象是一個什麼類型,主要有:Object、array、string、integer、number、boolean、enum、null
Object類型主要關鍵字有:
- properties:定義object的各個字段的屬性;
- required:限定必需字段。
- additionalProperties:properties不能是其他字段爲False,否則爲True
array類型主要關鍵字有:
1. items:每個元素的類型;
2. minItems:最小個數;
3. uniqueitems:每一個元素都不一樣(True,False)。
string類型主要關鍵字有:
1. maxLength定義字符串的最大長度;
2. minLength定義字符串的最小長度;
3. pattern用正則表達式約束字符串。
number類型主要關鍵字有:
1. minimum(maximum) 最小(大)值;
2. exclusiveMin(ax)imum 如果其值對應爲true,則實例大(小)於 min(ax)imum 的值才生效。
integer類型與number類型限制類似,可以描述任意長度,任意小數點的數字。
2. 使用技巧:
若接口中參數較多,並且每一個都需要驗證時,需要把每一個的校驗都要寫上, required後將每一個必須的字段都加上;但是若需要校驗的json字段在此schema中只佔了部分的話,那麼完全可以複用一套schema,只是在此json中不存在的字段在schema中的required後面不用加,如此減少了再次書寫schema的工作量。
總結
Jsonschema主要用於對數據的約束以及校驗,描述已知的數據格式,確保用戶提交的數據質量,減少部分手工校驗。