提及JSON(JavaScript 對象表示法),作為一種數據交換格式,項目中客戶端與服務端交互的時候頻繁用到。說來慚愧,剛實習的時候,直接被派到政府里面去對接開發門戶網站,沒錯,組長交代二句就飛到他處出差,當時我還沒聽過 Json、easyUI,獨自坐在監控大廳那叫一個尷尬,手忙腳亂,惴惴不安。著實被鄙視了一番,竊以為恥。
如果說英語作為世界大部分國家交流的公用語言,那么JSon就算各平臺主要進行交互的通用數據格式。畢竟還有部分土著部落交流適用的不是英語,誠然,Json也不是絕對的,XML數據格式也占有一席之地。日常用到的輕量級的數據交換格式,自認為接觸的還算多,亦寫了簡潔版系列來對復雜XML日常使用說明的隨筆。這里希望對JSON的一些基礎知識進行梳理。
1.JSON語法
JSON 數據的格式為 名稱:值 ,如 { “Name” :“Mark” } ,這里冒號左邊部分為名稱,用雙引號包含。冒號右邊為值,可表示 對象、字符串、數組、數字、布爾、null 六種類型。
表示多筆數據時,用 逗號區別,如 { “Name” :“Mark” , “Age”:100 }
這里{ } 是讀取的起始對象,
{
"Class" : "5",
[“Name” :“Mark” , “Age”:15] ,
[“Name” :“Sientuo” , “Age”:12]
}
如果拿到一組JSON數據,想要驗證其寫法是否正確,一般情況下,直接拷貝到在線網站上進行驗證即可,畢竟這類網站非常多。
2. Json數據類型
JSon中的數據類型是針對值來定義的,這里的值是指JSON數據中《名稱:值》 中的值,上面提到值有6中類型。下面一一來列舉說明。
①對象:Json本身就是對象,用 { }包裹,如果其值為對象,肯定涉及到嵌套 ,再復雜的對象嵌套,只要理清層級關系,基礎只是牢固,也不會是丈二的和尚。
{
“Class” : “5”,
“Xun”:{"heigh":175,"weigth":55,“sex”:“男” }
}
②字符串:最常用,只是需要注意的是對特殊字符的轉義/
③數組:最麻煩,JSON的數組可以是任何類型的組合,雖然在多數語言中這是不被允許的。比床頭柜的抽屜,可能每層放不同的書籍,也可能某層放玩具、鈔票、或者空著
{
"Drawer" : [“Toys”,“Book”,null,1000 ]
}
④數字:整型、浮點型 如年齡、訂貨量 就是整數,欠款、股票收益 則可用 負浮點數表示。
{
“Age”:15,
“balance”:-123.456
}
⑤布爾:表示事物的兩面性,正反(陰陽). 如:你是男是女?(是/不是) 你能活到80歲嗎?(能/不能) 你有女朋友(單身狗)嗎(有/沒有)
{
" SingleDog" : true
}
⑥null : 對某事物的狀態說明,表程度. 如:你有幾套房子?(2/null -租房狗,鬼的房子) null表示沒有值,JSON中必須用小寫,包括 true、false。這里有一概念。字面量:字面值與表達值一至,需要用小寫,否則解析時出錯。
{
" House" :null
}
3.Json 限定
和大多數語言一樣,對于某些成員變量,總會有一些跳跳框框的限定,或者說是一種規范,好比表單提交,年齡框數值超過認知范圍,肯定是通過不了驗證。對于Net 而言,在創建是數據庫表對應的實體Model時,上面總會加上一行限定。而對于Json而言亦如此。
① 聲明Json Schema 文件
②對屬性進行限定 如 minLenth、maxLength、minimum、type、required 等
如:
{
“$schema” :“http://json-schema.org/draft-04/schema#”,
"title" : "cat" ,
"properties" : { "name" :{ "type" : "string" , "minLenth" : 3 , "maxLenth" : 20 },
"age" : { "type" : "number" ," minimum" : 0 },
}
"required" : [ "name","age" ]
}
4. Json 序列化
當我們調用某個網站的接口,返回JSON數據的時候,對于Json 數據的序列化,我曾在從零開始調用手機號歸屬地查詢的接口 隨筆中,做過簡單的說明,兩種方法,各有千秋。
其一:
①創建參數對應實體;②調用JsonConvert類中 DeserializeObject<T> 方法進行解析;③根據節點關系訪問數據
其二:
①直接調用JObject類中Parse方法進行解析;②根據節點關系訪問數據
參考文獻 《JSON必知必會》、《JSON入門指南》
---市人皆大笑,舉手揶揄之
文章列表