啟動架構
聲明jsonschema:
schema?架構關鍵字,指出此架構是根據(jù)標準的特定草稿編寫的
id?架構關鍵字,定義模式的URI,并解析模式中其他URI引用的基URI
title?和?description?關鍵字是描述性的,并不對數(shù)據(jù)具有約束作用,只是用來對文檔作補充說明
type驗證關鍵字定義我們的JSON數(shù)據(jù)的第一個約束,在這種情況下,它必須是一個JSON對象

type關鍵字指定對象或屬性的類型
常用類型:
string:字符串? ? ? ? ? ? number:數(shù)字? ? ? ?integer:整型? ? ? ?boolean:布爾值? ? ? ? ? ? object:對象? ? array:數(shù)組
string 字符串的驗證關鍵字
maxLength:此關鍵字的值必須是非負整數(shù)。如果字符串實例的長度小于或等于此關鍵字的值,則該字符串實例合法。
minLength:此關鍵字的值必須是非負整數(shù)。如果字符串實例的長度大于或等于此關鍵字的值,則該字符串實例合法。如果沒有此關鍵字,則默認字符串實例的長度>=0。
pattern:該值為正則表達式。如果字符串實例與此正則表達式匹配,則認為字符串實例有效。
array?數(shù)組的驗證關鍵字
items:array里每個元素的類型。如果items是一個object對象,則需要定義該對象下的每個元素校驗模板,如果實例中的所有元素都匹配這些模板,則認為實例合法有效。如果items是一個array數(shù)組,則只需要定義一個元素的校驗模板,所有實例中的所有元素都匹配這個模板,則認為實例合法有效。省略此關鍵字與空schema具有相同的效果。
maxItems:此關鍵字的值必須是非負整數(shù)。如果數(shù)組實例的元素個數(shù)小于或等于此關鍵字的值,則認為實例合法。
minItems:此關鍵字的值必須是非負整數(shù)。如果數(shù)組實例的大小大于或等于此關鍵字的值,則認為實例合法。如果沒有此關鍵字,則數(shù)組元素的個數(shù)必須>=0。
uniqueItems:該關鍵字的值必須是布爾值。如果此關鍵字為false,則實例里的各元素可以相同;如果它為true,則實例里的各元素要各不相同才算合法有效。如果沒有此關鍵字,則默認實例里的各元素可以相同。
contains:此關鍵字的值必須是有效的JSON格式。如果至少有一個元素對給定的模式有效,則數(shù)組實例對“contains”有效。

additionalItems:其值必須是有效的json格式,針對實例多出來的數(shù)據(jù)進行校驗。如果值為false,則實例里只要有一個不匹配items,則無效。

dependencies:屬性依賴,該關鍵字的值必須是一個對象。如果A依賴于B,則當存在A而沒有B時,實例算是不合法的。

object?對象的驗證關鍵字
type:類型
properties:其值必須是一個對象,且該對象的每個值必須是有效的JSON格式。必須得有這個關鍵字,如果沒有則認為是空對象。
required:該關鍵字的值必須是一個數(shù)組。如果這個數(shù)組有元素的話,元素的類型必須是字符串,并且是唯一的。如果定義了這個關鍵字,那么表示實例中必須得有這個關鍵字里的元素,沒有的話,則實例不合法。如果沒有此關鍵字,則認為是空數(shù)組,則表明此對象下的元素都不是必須的。
maxProperties:此關鍵字的值必須是非負整數(shù)。如果對象實例的屬性數(shù)小于或等于此關鍵字的值,則認為實例合法有效。
minProperties:此關鍵字的值必須是非負整數(shù)。如果對象實例的屬性數(shù)大于或等于此關鍵字的值,則認為實例合法有效。如果沒有此關鍵字,則認為實例屬性個數(shù)>=0即可。
additionalProperties:其值必須是有效的JSON模式。此關鍵字確定子實例如何驗證對象,而不直接驗證直接實例本身。使用“additionalProperties”進行驗證僅適用于與“properties”中的任何名稱都不匹配的實例名稱的子值,并且不匹配“patternProperties”中的任何正則表達式。對于所有此類屬性,如果子實例針對“additionalProperties”架構進行驗證,則驗證成功。省略此關鍵字與空架構具有相同的行為。與additionalItems類似。如果值為false,則實例里只要有一個不匹配properties,則無效。

propertyNames:其值必須是有效的JSON格式,定義?properties的屬性名稱的格式。如果實例屬性的名稱不符合所定義的規(guī)則,則無效。

dependencies:屬性依賴,該關鍵字的值必須是一個對象。如果A依賴于B,則當存在A而沒有B時,實例算是不合法的。例子見數(shù)組模塊。
patternProperties:其值必須是一個對象,用正則表達式去定義?properties的屬性名稱的格式。如果實例屬性的名稱不符合所定義的規(guī)則,則無效。

integer 整型的驗證關鍵字
minimum:該關鍵字的值必須是一個數(shù)字,表示數(shù)字實例的包含下限。當實例大于或等于此值時,該實例才合法。
maximum:該關鍵字的值必須是一個數(shù)字,表示數(shù)字實例的包含上限。當實例小于或等于此值時,該實例才合法。
exclusiveMinimum:如果存在此關鍵字并且為 true,則表明實例僅在其值嚴格大于(不等于)?"minimum" 的值時才算合法有效
exclusiveMaximum:如果存在此關鍵字并且為 true,則表明實例僅在其值嚴格小于(不等于)?"maximum" 的值時才算合法有效
multipleOf:其值必須是大于0的整數(shù),僅當實例被這個關鍵詞的值除以之后的結果是一個整數(shù)時,這個實例才是有效的。
enum:該關鍵字的值是數(shù)組,實際返回的字段值在這個數(shù)組里,才算有效
number 數(shù)字的驗證關鍵字
此關鍵字可以描述任意長度,任意小數(shù)點的數(shù)字。
minimum:該關鍵字的值必須是一個數(shù)字,表示數(shù)字實例的包含下限。當實例大于或等于此值時,該實例才合法。
maximum:該關鍵字的值必須是一個數(shù)字,表示數(shù)字實例的包含上限。當實例小于或等于此值時,該實例才合法。
exclusiveMinimum:如果存在此關鍵字并且為 true,則表明實例僅在其值嚴格大于(不等于)?"minimum" 的值時才算合法有效
exclusiveMaximum:如果存在此關鍵字并且為 true,則表明實例僅在其值嚴格小于(不等于)?"maximum" 的值時才算合法有效
其他關鍵字
boolean?:就兩種情況:true或者false
enum:其值必須是數(shù)組,列出所有情況,如果實例的值不在這個數(shù)組里,則實例無效
null:空
const:其值可以是任意類型,包括null,只要實例的返回值跟這個值一模一樣,則實例有效合法
架構外的引用
可在schema內部引用另外一個schema來合并驗證?
目的:重用,可讀性和可維護性?
warehouseLocation關鍵字和ref關鍵字?
例如:?
"warehouseLocation":?{?
??????"description":?"Coordinates of the warehouse where the product is located.",?
??????"$ref":?"https://example.com/geographical-location.schema.json"?
????}?
ref的值為被引用的schema的$id?
架構內的引用
可在schema內部引用另外一個schema來合并驗證?
definitions關鍵字和ref關鍵字?
例如:?
{
? ? ?"vegetables":?{?
??????"type":?"array",?
??????"items":?{?"$ref":?"#/definitions/veggie"?}?
????}?
??},?
??"definitions":?{?
????"veggie":?{?
??????"type":?"object",?
??????"required":?[?"veggieName",?"veggieLike"?],?
??????"properties":?{?
????????"veggieName":?{?
??????????"type":?"string",?
??????????"description":?"The name of the vegetable."?
????????},?
????????"veggieLike":?{?
??????????"type":?"boolean",?
??????????"description":?"Do I like this vegetable?"?
????????}?
使用條件應用于子模式的關鍵字
這些關鍵字一起工作以基于另一個子模式的結果實現(xiàn)子模式的條件應用。
if
此關鍵字的值必須是有效的JSON格式。
此關鍵字的子模式的驗證結果對整體驗證結果沒有直接影響。相反,它控制了哪個“then”或“else”關鍵字被判斷。
成功驗證此關鍵字的子模式的實例必須對“then”關鍵字的子模式值(如果存在)有效。
無法針對此關鍵字的子模式進行驗證的實例也必須對“else”關鍵字的子模式值(如果存在)有效。
then
此關鍵字的值必須是有效的JSON格式。
當“if”存在且實例成功驗證其子模式時,如果實例也成功驗證此關鍵字的子模式,則valiation將成功對該關鍵字進行驗證。
當“if”不存在時,或者實例無法針對其子模式進行驗證時,此關鍵字無效。
else
此關鍵字的值必須是有效的JSON格式。
當“if”存在且實例無法針對其子模式進行驗證時,如果實例成功驗證此關鍵字的子模式,則valiation將成功對該關鍵字進行驗證。
當“if”不存在時,或者實例成功驗證其子模式時,此關鍵字無效。
使用布爾邏輯應用子模式的關鍵字
allOf:該關鍵字的值必須是非空數(shù)組,數(shù)組的每個項必須是有效的JSON模式,意思是展示全部屬性。如果實例針對此關鍵字的值定義的所有模式成功驗證,則實例才算合法有效。
anyOf:該關鍵字的值必須是非空數(shù)組,數(shù)組的每個項必須是有效的JSON模式,意思是展示任意屬性。如果實例針對此關鍵字的值定義的至少一個模式成功驗證,則實例就算合法有效。
oneOf:該關鍵字的值必須是非空數(shù)組,數(shù)組的每個項必須是有效的JSON模式,意思是滿足其中一個屬性。如果實例針對此關鍵字的值定義的有且只有一個模式成功驗證,則實例就算合法有效。
not:此關鍵字的值必須是有效的JSON模式,非 * 類型。如果實例無法針對此關鍵字定義的模式成功驗證,則實例就算合法有效。

具體使用參考:https://blog.csdn.net/weixin_42534940/article/details/103615260
備注
1、https://jsonschema.net/previous? ? ? 這個網(wǎng)站可以生成基礎的schema校驗模板,但是有可能是有錯的,得自己再檢查并補充修改
2、填寫正則表達式之后最好再檢查一下數(shù)據(jù)的json格式是否正確,因為部分正則表達式可能因為部分字符讓json格式校驗不通過


3、type也可以寫成數(shù)組類型
