1. JSON Schema簡介
我們知道,JSON和XML相比飞醉,在很多方面具有更多的優(yōu)勢冲茸。未來,JSON在各方面取代XML缅帘,很有可能就是歷史大勢所趨轴术。了解XML的都知道,XML Schema是以XML語言為基礎(chǔ)钦无,用于描述XML文檔的結(jié)構(gòu)以及校驗(yàn)XML文檔內(nèi)容逗栽,也就是我們常常見到的XSD(XML Schema Definition)文件。
和XML Schema類似失暂,JSON Schema是基于JSON格式祭陷,用于定義JSON數(shù)據(jù)結(jié)構(gòu)以及校驗(yàn)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來校驗(yàn)錄入的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實(shí)際上就是一個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表示待校驗(yàn)元素的類型(例如,最外層的type表示待校驗(yàn)的是一個JSON對象千康,內(nèi)層type分別表示待校驗(yàn)的元素類型為享幽,整數(shù),字符串拾弃,數(shù)字)
properties定義待校驗(yàn)的JSON對象中值桩,各個key-value對中value的限制條件
required定義待校驗(yàn)的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使用正則表達(dá)式約束字符串類型數(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校驗(yàn)數(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.reibang.com/p/2b7a2b1d0c49
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)徊件,非商業(yè)轉(zhuǎn)載請注明出處奸攻。