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

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 使用正則表達(dá)式約束字符串類型數(shù)據(jù)

其中,type的常見取值如下:

type取值 對應(yīng)的Java數(shù)據(jù)類型
array java.util.List
boolean java.lang.Boolean
integer int(java.lang.Integer)
number float(java.lang.Float)或int
null null
object java.lang.Object
string java.lang.String

如果你熟悉了上面這些關(guān)鍵字的含義催什,那么讀懂JSON Schema的內(nèi)容也就不再那么困難了,甚至可以嘗試動手寫一些JSON Schema文件了宰睡。

4. JSON Schema在線工具

JSON Schema的在線輔助工具有很多蒲凶,推薦以下幾個:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旋圆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子麸恍,更是在濱河造成了極大的恐慌灵巧,老刑警劉巖搀矫,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刻肄,居然都是意外死亡瓤球,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門敏弃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卦羡,“玉大人,你說我怎么就攤上這事麦到÷潭” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵瓶颠,是天一觀的道長拟赊。 經(jīng)常有香客問我,道長粹淋,這世上最難降的妖魔是什么吸祟? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮廓啊,結(jié)果婚禮上欢搜,老公的妹妹穿的比我還像新娘。我一直安慰自己谴轮,他們只是感情好炒瘟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著第步,像睡著了一般疮装。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粘都,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天廓推,我揣著相機(jī)與錄音,去河邊找鬼翩隧。 笑死樊展,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堆生。 我是一名探鬼主播专缠,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淑仆!你這毒婦竟也來了涝婉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蔗怠,失蹤者是張志新(化名)和其女友劉穎墩弯,沒想到半個月后吩跋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渔工,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年锌钮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涨缚。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡轧粟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脓魏,到底是詐尸還是另有隱情兰吟,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布茂翔,位于F島的核電站混蔼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏珊燎。R本人自食惡果不足惜惭嚣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悔政。 院中可真熱鬧晚吞,春花似錦、人聲如沸谋国。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芦瘾。三九已至捌蚊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間近弟,已是汗流浹背缅糟。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祷愉,地道東北人窗宦。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像二鳄,于是被迫代替她去往敵國和親迫摔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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