Json是什么?以及Json的序列化和反序列化



https://blog.csdn.net/pupilxiaoming/article/details/80988013

一什么是JSON?

  中午肚子餓了,到餐廳點餐。向服務員點了幾個菜,廚師根據用戶的需求,開始烹飪食物,食物烹飪好后,怎么將食物呈現給用戶呢?這時就需要用到盛放食物的碗了用戶拿到盛放食物的碗,就可以獲得點的餐了這個碗就充當了數據交換的容器了。(^ - ^)

 

  客戶端向服務器端發送請求后,服務器端怎么才能把用戶需要的數據返回給客戶端呢。這時我們就需要用一個指定的格式將數據,按照指定格式返回客戶端。這時就有了兩種數據傳輸的方式(XMLJson):

  在普通的網絡應用中,不管是服務器端還是客戶端解析XML代碼會非常麻煩,所以這時的Json的就更加滿足數據傳輸解析的要求。采用的的Json格式的方式進行數據的傳輸,不僅方便傳輸解析,還特別易於人閱讀和編寫

二.XML與Json的的轉換:

1.常規轉換:

  1.  
    <emp>
  2.  
    <name>fxhl</name>
  3.  
    <city>深圳</city>
  4.  
    <age>23</age>
  5.  
    </emp>

轉換為的Json的為:

  {“名”:“fxhl”,“城市”:“深圳”,“年齡”:23}

三以以.json的表現形式:

  1.對象:

  1.  
    {
  2.  
    "returnCode": "R0000",
  3.  
    "returnMsg": "成功",
  4.  
    "lessTimes": "2",
  5.  
    "domainLink": "",
  6.  
    "seqNum": "1",
  7.  
    "identification": "595279",
  8.  
    "isNeedImageCode": "false"
  9.  
    }

 

  2.數組:

  1.  
    {
  2.  
    "employees": [
  3.  
    { "firstName":"John" , "lastName":"Doe" },
  4.  
    { "firstName":"Anna" , "lastName":"Smith" },
  5.  
    { "firstName":"Peter" , "lastName":"Jones" }
  6.  
    ]
  7.  
    }

 

  3.數組對象混合:

    這是截取的一小部分,對於比較復雜的的的Json格式的字符串,可以在線驗證JSON。格式化一個格式。方便觀看

      • JSON的表現形式一般就三種(對象,數組,字符串),使用過程中,只是將對象與數組進行混合了

 

  1.  
    {
  2.  
    "icon": [
  3.  
    {
  4.  
    "title": "尚天貓,就購了",
  5.  
    "icon_category": "baobei",
  6.  
    "icon_key": "icon-service-tianmao",
  7.  
    "trace": "srpservice",
  8.  
    "innerText": "天貓寶貝",
  9.  
    "url": "//www.tmall.com/"
  10.  
    },
  11.  
    {
  12.  
    "title": "保險理賠",
  13.  
    "position": "99",
  14.  
    "innerText": "分組-保險理賠",
  15.  
    "iconPopupComplex":
  16.  
           {
  17.  
    "popup_title": "保險理賠",
  18.  
    "subIcons": [
  19.  
    {
  20.  
    "dom_class": "icon-service-yunfeixian",
  21.  
    "icon_content": "賣家贈送退貨運費險"
  22.  
    }
  23.  
    ]
  24.  
    }
  25.  
    }
  26.  
    ]
  27.  
    }

 

4. 以以.json序列化和解析

 

JSON.stringify() - 將對象序列化為JSON字符串

JSON.parse() - 將JSON數據解析為Javascript對象

默認情況下JSON.stringify()輸出的JSON字符串不包含任何空格字符或縮進;此外,值為未定義的任何屬性也都會被跳過,結果都是有效的JSON數據類型。

實際上,JSON.stringify()除了要序列化的javascript對象之外,還可以接收兩個參數(用於指定以不同方式序列化的JavaScript):1第一個參數是過濾器(可為數組或函數))2。第二個參數是一個選項(表示是否在JSON字符串中保留縮進)

4.1 過濾結果

  •  如果過濾器的參數是數組,那么JSON.stringify()的結果將只包含數組中列出的屬性。

      

注意:第二個數組中的兩個字段要與JSON中的屬性對應。

輸出結果:(jsonText的值)

 

 

 

  • ü如果第二個參數是函數(傳入的函數接收兩個屬性,屬性(鍵)名和屬性值):

 

 

輸出結果:(jsonText的值)

 

可以看到如果鍵為”編輯”,通過返回未定義刪除該屬性。一定要提供默認項,使其他值可以顯示在結果中

 

4.12 字符串的縮進

JSON.stringify()方法的第三個參數用於控制結果的縮進和空白符。如果這個參數是一個樹枝那么他表示的是每個級別的縮進空格。

例:要每個級別縮進4個空格

var jsonText = JSON.stringify(book,null,4)

注:最大縮進空格為10,所有大於10的值都會被自動轉換為10。

 

4.13 tojson()方法

有時候JSON.stringify()不能滿足自動序列化的需求。這時就可以給對象定義的toJSON()方法。

                      

結果輸出:

                    

的toJSON()方法可以作為函數過濾器的補充假設把一個對象傳入JSON.stringify(),序列化該對象的順序:

(1)如果存在的toJSON()方法且能通過它取得有效的值,則調用該方法,否則返回JSON本身。

(2)如果提供了第二個參數,應用這個過濾器,傳入過濾器的值是第(1)步返回的值(其實結果就是,上述的jsonText輸出結果是的的toJSON()方法返回的值)

(3)如果提供了第三個參數,執行相應的格式化操作。

 

4.2解析結果

JSON.parse()來來方法也可以接收另一個參數,該參數是個函數,將在每個鍵值對上調用。為了區別去JSON.stringify(),這個函數被稱作還原函數

如果還原函數返回未定義則刪除該鍵,如果返回其他值,則將鍵插入到結果中去。

例:在日期字符串轉化為日期對象時,經常用到還原函數

                

輸出結果:

              

小結:“JSON對象要求給屬性加雙引號,忘了給對象屬性名加雙引號而寫成單引號都是常見的錯誤”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM