天天看點

json 序列化 反序列化

一、基礎知識

  1. JSON

JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的資料交換格式。它基于 ECMAScript (歐洲計算機協會制定的JS規範)的一個子集,利用javascript中的一些模式來表示結構化的資料。

    1. JSON 文法規則

任何支援的類型都可以通過 JSON 來表示,例如字元串、數字、對象、數組等。但是對象和數組是比較特殊且常用的兩種類型:

對象:對象在 JS 中是使用花括号包裹 {} 起來的内容,資料結構為 {key1:value1, key2:value2, ...} 的鍵值對結構。在面向對象的語言中,key 為對象的屬性,value 為對應的值。鍵名可以使用整數和字元串來表示。值的類型可以是任意類型。

數組:數組在 JS 中是方括号 [] 包裹起來的内容,資料結構為 ["java", "javascript", "vb", ...] 的索引結構。同樣,值的類型可以是任意類型。

json 序列化 反序列化
    1. 和XML的比較
  1. 可讀性

JSON和XML的可讀性可謂不相上下,一邊是簡易的文法,一邊是規範的标簽形式,很難分出勝負。

  1. 可擴充性

XML天生有很好的擴充性,JSON當然也有,沒有什麼是XML可以擴充而JSON卻不能擴充的。不過JSON在Javascript主場作戰,可以存儲Javascript複合對象,有着xml不可比拟的優勢。

  1. 執行個體比較

XML和JSON都使用結構化方法來标記資料,下面來做一個簡單的比較。

用XML表示中國部分省市資料如下:

json 序列化 反序列化

用JSON表示如下:

json 序列化 反序列化

可以看到,JSON 簡單的文法格式和清晰的層次結構明顯要比 XML 容易閱讀,并且在資料交換方面,由于 JSON 所使用的字元要比 XML 少得多,可以大大得節約傳輸資料所占用的帶寬。

  1. 序列化和反序列化

序列化 (Serialization)是将對象的狀态資訊轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象将其目前狀态寫入到臨時或持久性存儲區。以後,可以通過從存儲區中讀取或反序列化對象的狀态,重新建立該對象。

  1. JavaScript  JSON對象
    1. JSON對象兩個方法:
json 序列化 反序列化
    1. JSON.parse()和jQuery.parseJSON()的差別:

有的浏覽器不支援JSON.parse()方法,使用jQuery.parseJSON()方法時,在浏覽器支援時會傳回執行JSON.parse()方法的結果,否則會傳回類似執行eval()方法的結果。eval(): 也是用于将一個 JSON 字元串轉換為 JavaScript 對象

json 序列化 反序列化
json 序列化 反序列化
  1. jQuery序列化表單 serialize() serializeArray()
    1. serialize()方法

  格式:var data = $(“form”).serialize();

  功能:将表單内容序列化成一個字元串。

  這樣在ajax送出表單資料時,就不用一一列舉出每一個參數。隻需将data參數設定為 $(“form”).serialize() 即可。

    1. serializeArray()方法

  格式:var jsonData = $(“form”).serializeArray();

  功能:将頁面表單序列化成一個JSON結構的對象。注意不是JSON字元串。

  比如,[{“name”:”lihui”, “age”:”20”},{…}] 擷取資料為 jsonData[0].name

json 序列化 反序列化
json 序列化 反序列化
  1. Java中JSON解析
    1. Java中并沒有内置JSON的解析,是以使用JSON需要借助第三方類庫。

下面是幾個常用的 JSON 解析類庫:

  1. Gson: 谷歌開發的 JSON 庫,功能十分全面。
  2. FastJson: 阿裡巴巴開發的 JSON 庫,性能十分優秀。
  3. Jackson: 社群十分活躍且更新速度很快。
json 序列化 反序列化
    1. Gson應用執行個體,調用第三方webservice 接口并解析

傳回資料格式

json 序列化 反序列化

根據資料格式建Java對象RecvHistoryMsg  和 RecvMsgData

json 序列化 反序列化
json 序列化 反序列化

調用接口,傳回結果反序列化為對象

json 序列化 反序列化