JSON 和 JSON Schema

JSON數(shù)據結構殿衰,在互聯(lián)網時代被廣泛的運用在系統(tǒng)調用的交互中。由于其簡潔、易懂捺癞、可讀性好夷蚊,基本壟斷了用戶端和服務器之間的數(shù)據交換之中。JSON是用來表示數(shù)據的翘簇,那么表示JSON結構的數(shù)據結構是什么呢撬码?哈哈,有點繞口啊版保,這就是我想要講的JSON Schema呜笑。就像Meta Data(元數(shù)據)被稱為是描述數(shù)據的數(shù)據,那么JSON Schema就是描述JSON數(shù)據的JSON數(shù)據彻犁。

JSON Schema描述JSON數(shù)據格式的JSON叫胁!

首先上一張圖!

Douglas Crockford 發(fā)明JSON的時候說整個JSON的數(shù)據結構的語法可以完全寫在一張名片上汞幢,他還真這么做了驼鹅,這是他的名片的背面∩瘢可見JSON格式是多么的簡潔啊输钩。我經常會感嘆,牛人確實是牛人仲智,偉大的東西一般都很簡潔买乃,當然不代表很簡單。剛開始了解的時候钓辆,會覺得真是簡單剪验,當然這只是用起來,可是又一次我想說自己試著寫個JSON解析器的時候前联,就知道多么難了功戚,各種邊界情況,各種考慮似嗤,最后還是乖乖的看看別人的實現(xiàn)啸臀。好像扯遠了!

首先我們要知道烁落,JSON Schema本身也是一個JSON數(shù)據結構壳咕,用一種特定的JSON數(shù)據結構來描述另一個JSON數(shù)據結構的結構!顽馋!也是夠繞的谓厘。有點像雞生蛋、蛋生雞的味道寸谜。

一般當我了解到一個東西的時候(尤其是技術竟稳、標準),我會去看一下它到底是個什么東西,用來干嘛他爸,怎么實現(xiàn)等等的角度聂宾,和身邊的小伙伴聊天,看一個技術很多時候最初也是從這個角度來出發(fā)了诊笤。這里并不想從這些角度來思索這個東西系谐,首先JSON Schema是一個開源標準,任何人都可以使用讨跟,主要分兩個部分:

Schema 標準的定義

JSON Schema

JSON Hyper-Schema

Validation 數(shù)據結構的驗證

具體的內容可以去這里尋找纪他,整個標準的文檔也不算長:http://json-schema.org/

這里還要一些JSON Schema Validation的實現(xiàn):

https://github.com/epoberezkin/ajv

http://json-schema.org/implementations.html#validators

比起怎么實現(xiàn),我更加想知道它的價值是什么晾匠,為什么需要這個標準茶袒?能用來干嘛?

還是得想為什么需要JSON Schema凉馆?

描述數(shù)據結構的數(shù)據結構薪寓,讓我想起了MetaData - 描述數(shù)據的數(shù)據。在我們的各種設備中澜共,都會用到各種metadata向叉,比如描述文件,描述圖片的嗦董,描述文件夾的等等母谎。

首先想到的是一些場景可以用到:

當我們創(chuàng)建一種JSON結構來前后端通信的時候,如果校驗比較嚴格展懈,那么可以為每一種結構創(chuàng)建JSON Schema然后用來數(shù)據結構的校驗。

又比如比如我們希望用一種結構讓前端的渲染和數(shù)據結構來對應起來供璧,然后希望可以編輯存崖,那么就需要一種Schema來生成編輯器。通過Schema生成的編輯器就可以最終變成我們指定的結構睡毒。

其實第二種場景比較常見来惧,如果我們想創(chuàng)作一個像Sketch的編輯器,那么里面有很多的組件演顾,編輯器的生成可能就是通過一些列的Schema來生成供搀,其實最后生成的最終結構也是一個JSON。這里其實是對自己的一些項目是有啟發(fā)式的钠至,很多時候我們絞盡腦汁的想一個結構來描述屬性葛虐、樣式等等,其實直接使用JSON Schema的標準來實現(xiàn)棉钧,是事半功倍的屿脐。

很多時候我們希望能夠創(chuàng)造出一種產品,可以通過配置配置,通過拖拖拽拽的诵⊥蛘ぃ或者我們不想每次都重復開發(fā),不希望做自定義化產品西疤,比如crm系統(tǒng)烦粒、建站工具等等,那么我們可能就需要一種標準來描述整個系統(tǒng)代赁、模塊扰她、組件等等本身,通過一種統(tǒng)一的標準來把多個東西拼接在一起管跺∫謇瑁或許在這種時候,我們也可以用到豁跑。

JSON解析還有JS廉涕?

我覺得JS成功其中一個原因就是內置了JSON格式處理,這個大大方便了各種處理艇拍。JSON的處理有時候還是很頭疼的狐蜕,雖然JS看上去挺簡潔易上手的,和JSON一樣卸夕,各種邊界层释、各種小技巧層出不窮。過于簡潔就好像用0101來編程一樣快集,當然這個比喻好像不太恰當贡羔。有時候限制是必要的。

所以我覺得JSON Schema的其中一個用處就是限制个初,當各方拿到的是相同的Schema那么就本質上限制了JSON結構了乖寒,也就是我們知道得到的是什么,就好像Java里面我們需要定義類型院溺,我們知道這個變量只能是這么個類型楣嘁,在JS中就不行了,過度自由珍逸,最后發(fā)現(xiàn)又得加上一些枷鎖逐虚,這樣可能更利于開發(fā)大型項目和管理代碼∽簧牛可是太死板了叭爱,有會導致大家努力把它變得更靈活。很多時候也是一種平衡吧漱病。

要不要用Schema得看情況涤伐,如果任何時候都用馒胆,那么開發(fā)起來應該效率不高。深入去了解這個標準凝果,你會發(fā)現(xiàn)基本可以描述一切祝迂!說不定某個時刻會有用的!了解下~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末器净,一起剝皮案震驚了整個濱河市型雳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌山害,老刑警劉巖纠俭,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浪慌,居然都是意外死亡冤荆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門权纤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓简,“玉大人,你說我怎么就攤上這事汹想⊥獾耍” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵古掏,是天一觀的道長损话。 經常有香客問我,道長槽唾,這世上最難降的妖魔是什么丧枪? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮庞萍,結果婚禮上拧烦,老公的妹妹穿的比我還像新娘。我一直安慰自己挂绰,他們只是感情好屎篱,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布服赎。 她就那樣靜靜地躺著葵蒂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪重虑。 梳的紋絲不亂的頭發(fā)上践付,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音缺厉,去河邊找鬼永高。 笑死隧土,一個胖子當著我的面吹牛,可吹牛的內容都是我干的命爬。 我是一名探鬼主播曹傀,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饲宛!你這毒婦竟也來了皆愉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤艇抠,失蹤者是張志新(化名)和其女友劉穎幕庐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體家淤,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡异剥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了絮重。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冤寿。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绿鸣,靈堂內的尸體忽然破棺而出疚沐,到底是詐尸還是另有隱情,我是刑警寧澤潮模,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布亮蛔,位于F島的核電站,受9級特大地震影響擎厢,放射性物質發(fā)生泄漏究流。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一动遭、第九天 我趴在偏房一處隱蔽的房頂上張望芬探。 院中可真熱鬧,春花似錦厘惦、人聲如沸偷仿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酝静。三九已至,卻和暖如春羡玛,著一層夾襖步出監(jiān)牢的瞬間别智,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工稼稿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留薄榛,地道東北人讳窟。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像敞恋,于是被迫代替她去往敵國和親丽啡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容