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使用正則表達式約束字符串類型數(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校驗數(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.itdecent.cn/p/2b7a2b1d0c49

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容