JSON開發(fā)筆記(二)—— JSON Schema實(shí)戰(zhàn)(上)

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)載請注明出處奸攻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庇忌,隨后出現(xiàn)的幾起案子舞箍,更是在濱河造成了極大的恐慌,老刑警劉巖皆疹,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異占拍,居然都是意外死亡略就,警方通過查閱死者的電腦和手機(jī)捎迫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來表牢,“玉大人窄绒,你說我怎么就攤上這事〈扌耍” “怎么了彰导?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敲茄。 經(jīng)常有香客問我位谋,道長,這世上最難降的妖魔是什么堰燎? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任掏父,我火速辦了婚禮,結(jié)果婚禮上秆剪,老公的妹妹穿的比我還像新娘赊淑。我一直安慰自己,他們只是感情好仅讽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布陶缺。 她就那樣靜靜地躺著,像睡著了一般洁灵。 火紅的嫁衣襯著肌膚如雪组哩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天处渣,我揣著相機(jī)與錄音伶贰,去河邊找鬼。 笑死罐栈,一個胖子當(dāng)著我的面吹牛黍衙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荠诬,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼琅翻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柑贞?” 一聲冷哼從身側(cè)響起方椎,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钧嘶,沒想到半個月后棠众,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年闸拿,在試婚紗的時候發(fā)現(xiàn)自己被綠了空盼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡新荤,死狀恐怖揽趾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛骨,我是刑警寧澤篱瞎,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站痒芝,受9級特大地震影響俐筋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吼野,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一校哎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞳步,春花似錦闷哆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘀倒,卻和暖如春屈留,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背测蘑。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工灌危, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碳胳。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓勇蝙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挨约。 傳聞我的和親對象是個殘疾皇子味混,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容