文章出處

      提及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入門指南》

  ---市人皆大笑,舉手揶揄之

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()