JSON Schema小記

        JSON是一種表示數據的格式,類似的還有XML。與XML對比,JSON比較易讀,而且數據量比較小,就是行話裏說的比較輕量。JSON在Web應用裏用得比較多,如今,好多本地應用裏也可以一見它的身影。

        以往我們總講面向對象編程,現在又逐漸泛出另一種思想,稱爲面向數據編程,據我的理解,講的是數據即是對象,對象即是數據,舉個例子,兩段程序,分別對應兩個對象,它們接收數據而且產生數據,如果接收數據的格式一致並且產生數據的格式也一致,那麼這兩個對象可以看做是“一類”對象,它們之間是可以互相替換的。現在問題是如何判斷兩個對象接收的數據是否一致,這就是本文所要介紹的JSON Schema。

        JSON Schema本身也是一種JSON,它的作用是校驗別的JSON是否符合一定的規範,所以我們可以把JSON Schema稱爲JSON範式或模式。JSON範式包含一系列的關鍵字,每個關鍵字對應一個值。其中比較關鍵的關鍵字有Title、Description、Type和Properties。Title表示這個範式的標題,必不可少,是一個字符串類型的值。Description也是字符串類型的值,可以用來表示整個範式的說明,也可以表示某個屬性的說明。Type,是JSON裏比較基礎的關鍵字,類型,用來描述範式及屬性的基本格式。類型有六種:null,boolean,number,string,array和object。範式的類型只能是object類型。Properties就是屬性,我們用JSON也就是用它的屬性。屬性一般是一組,每一個屬性都有Description和Type等關鍵字。如果Type關鍵字是array,說明屬性由一組相同類型的元素組成,這個元素可以是基本類型,也可以是Object類型。如果Type關鍵字是Object,說明屬性是一個對象,那麼這個對象必然有其自己的範式定義,這就是嵌套定義一個範式。可以想見,由這樣的一個範式定義可以表示出極大豐富的數據內容。除了這幾個比較重要的關鍵字,還有一些起到修飾、限制作用的關鍵字,用來補充定義屬性的,比如required、minimum、maximum、minlength、maxlength等,分別表示必需的屬性、屬性最小值、屬性最大值、屬性最小長度、屬性最大長度等。

        這麼一個範式定義在應用中能起到什麼作用呢?其實就是一個數據校驗的作用。舉一個淺顯的例子,編一個動物園數據應用程序,要把這麼多動物的數據保存並且隨時讀取顯示,沒有一定的數據規範是不太好弄的。那麼,在數據錄入端便可以使用一套定義動物的JSON範式,只要符合這套範式的JSON動物數據,就可以通過一個統一的數據錄入程序讀取並保存。比如規定,動物數據必需有名稱、科屬、產地、外貌特徵、生活習性、體重、壽命等這些屬性,這些屬性多數是字符串類型的,少數是數字類型的。這樣定義好之後,所有提供數據的程序都要求產生符合這個範式的數據,否則將予以駁回。

        有人說,這些工作面向對象的程序也可以實現,而且用數據庫字段的方式完全可以勝任,而且做起來比較自然。面向數據的方式在某些方面比面向對象有較大的優勢,比如,數據格式的可維護性,不需要重新寫代碼,也不需要定義數據庫字段,數據庫只存了個範式,把這個範式改了就可以了。面向數據的方式也有它的不足,最大的問題就是稍嫌複雜,不夠直觀。這使我一下子想起來正則表達式,那就是一個數據驗證方式的極端例子,可讀性與可維護性,很是矛盾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章