1. JSON Schema簡介
我們知道,JSON和XML相比,在很多方面具有更多的優(yōu)勢。未來,JSON在各方面取代XML,很有可能就是歷史大勢所趨。了解XML的都知道,XML Schema是以XML語言為基礎(chǔ),用于描述XML文檔的結(jié)構(gòu)以及校驗XML文檔內(nèi)容,也就是我們常常見到的XSD(XML Schema Definition)文件。
和XML Schema類似,JSON Schema是基于JSON格式,用于定義JSON數(shù)據(jù)結(jié)構(gòu)以及校驗JSON數(shù)據(jù)內(nèi)容。JSON Schema官網(wǎng)地址:http://json-schema.org/
2. 從一個簡單例子開始
假如存在一份JSON數(shù)據(jù),具體內(nèi)容如下:
{"id":520,"name":"hello first blog","price":25.5}
其中,id表示圖書的ID,name表示圖書的書名,price表示圖書的售價。如果你是圖書館的管理員,雇了很多兼職人員幫你手動錄入圖書館內(nèi)所有的圖書信息。格式和上面的JSON保持一致,并且為了避免兼職人員失誤錄入臟數(shù)據(jù),你做了如下額外要求:
id從1開始,且只能為整數(shù)
name的長度應(yīng)該大于0,但是小于等于50
price必須大于0,可以為整數(shù),也可以為小數(shù)
每本圖書三個屬性(id、name、price)必須都有值
試想,如果圖書館有幾千本甚至上萬本圖書,每個兼職人員都把自己錄入的信息匯總給你,你做最后的把關(guān)和審核,這個工作量是非常巨大的,而且很容易出現(xiàn)失誤。所以,我們采用另一種自動化的方案,即通過JSON Schema來校驗錄入的JSON數(shù)據(jù)的合法性。
如果將上面所有的要求都寫入JSON Schema文件,其內(nèi)容如下:
{"$schema":"http://json-schema.org/draft-04/schema#","title":"BookInfo","description":"some information about book","type":"object","properties": {"id": {"description":"The unique identifier for a book","type":"integer","minimum":1},"name": {"description":"Name of the book","type":"string","maxLength":50,"minLength":1},"price": {"type":"number","minimum":0,"exclusiveMinimum":true}? ? },"required": ["id","name","price"]}
我們可以看到,JSON Schema實際上就是一個JSON文件,只不過其表示的信息內(nèi)容是對另一個JSON文件結(jié)構(gòu)和內(nèi)容的約束。
3. JSON Schema關(guān)鍵字
要想完全理解上文中的JSON Schema文件內(nèi)容,我們首先需要了解JSON Schema中關(guān)鍵字的含義和作用。JSON Schema中比較常見的關(guān)鍵字如下:
關(guān)鍵字描述
$schema表示該JSON Schema文件遵循的規(guī)范
title為該JSON Schema文件提供一個標(biāo)題
description關(guān)于該JSON Schema文件的描述信息
type表示待校驗元素的類型(例如,最外層的type表示待校驗的是一個JSON對象,內(nèi)層type分別表示待校驗的元素類型為,整數(shù),字符串,數(shù)字)
properties定義待校驗的JSON對象中,各個key-value對中value的限制條件
required定義待校驗的JSON對象中,必須存在的key
minimum用于約束取值范圍,表示取值范圍應(yīng)該大于或等于minimum
exclusiveMinimum如果minimum和exclusiveMinimum同時存在,且exclusiveMinimum的值為true,則表示取值范圍只能大于minimum
maximum用于約束取值范圍,表示取值范圍應(yīng)該小于或等于maximum
exclusiveMaximum如果maximum和exclusiveMaximum同時存在,且exclusiveMaximum的值為true,則表示取值范圍只能小于maximum
multipleOf用于約束取值,表示取值必須能夠被multipleOf所指定的值整除
maxLength字符串類型數(shù)據(jù)的最大長度
minLength字符串類型數(shù)據(jù)的最小長度
pattern使用正則表達式約束字符串類型數(shù)據(jù)
其中,type的常見取值如下:
type取值對應(yīng)的Java數(shù)據(jù)類型
arrayjava.util.List
booleanjava.lang.Boolean
integerint(java.lang.Integer)
numberfloat(java.lang.Float)或int
nullnull
objectjava.lang.Object
stringjava.lang.String
如果你熟悉了上面這些關(guān)鍵字的含義,那么讀懂JSON Schema的內(nèi)容也就不再那么困難了,甚至可以嘗試動手寫一些JSON Schema文件了。
4. JSON Schema在線工具
JSON Schema的在線輔助工具有很多,推薦以下幾個:
根據(jù)JSON和對應(yīng)的JSON Schema校驗數(shù)據(jù)的正確性:http://json-schema-validator.herokuapp.com/
根據(jù)JSON數(shù)據(jù),生成對應(yīng)的JSON Schema數(shù)據(jù):https://jsonschema.net/#/editor
根據(jù)JSON數(shù)據(jù),生成對應(yīng)的JSON Schema數(shù)據(jù):http://schemaguru.snowplowanalytics.com/#
作者:秋夢塵
鏈接:http://www.itdecent.cn/p/2b7a2b1d0c49
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。