1. 程式人生 > >淺談Json解析與序列化

淺談Json解析與序列化

從頭說起:

首先的首先,什麼是Json:一種資料表示形式,JSON:JavaScript Object Notation物件表示法

Json語法規則:

  • 資料在鍵值對中
  • 資料由逗號分隔
  • 花括號儲存物件
  • 方括號儲存陣列
像這樣:
{ "firstName":"John" , "lastName":"Doe" }
這樣:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}

或者這樣:

var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];

那什麼是物件序列化呢?

專業術語如是解釋:

序列化是將物件狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料。

通俗講呢:物件序列化就是指將物件的狀態轉換為字串

JSON物件

我們都知道eval()函式可以將Json轉換為Javascript物件。Js內建的eavl()函式用Json資料來生成原生的JavaScript物件。

這是早期的Json解析器解析方法,erjson物件有兩個方法:stringify()和parse()

這兩個方法分別用於將js物件序列化為json字串和把json字串解析誒原生的js值

下面來詳細說說這兩個函式:

一、JSON序列化


Json.stringify()

作用:序列化原始值、物件、陣列

語法:JSON.stringify(value [, replacer] [, space])

引數:

        value:要轉換成JSON字串的原始值、物件或陣列

   replacer:可選引數,一個數組或函式

   space:可選引數,一個數值或一個字串

返回:JSON格式的字串,代表value

的值,同時通過了replacer的過濾,以及根據space進行了格式化

<script>
 	var myMes= {
        "name": "ys",
        "age": 12
    };

    console.log(typeof myMes);//Object

    var jsonText = JSON.stringify(myMes);
    console.log(typeof jsonText);//String
 	</script>

成功將json物件轉化為json字串。

1、json資料過濾 

a.如果過濾器引數是陣列,那麼JSON.stringify()結果中將只包含陣列中列出的屬性。
 var myMes = {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    /*實現過濾,只留下name和age*/
    var jsonText = JSON.stringify(myMes, ["name", "age"]);
    console.log(jsonText);         //{"name": "ys", "age": 12}


b.如果第二個引數是函式,傳入的函式要接收兩個引數,再按照相應的需求做出處理

 var myMes= {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    var jsonText = JSON.stringify(myMes, function(key, value){
        switch(key){
            case "name": 
                return "名字改變了";
            default: 
                return value;
        }
    }, 4);
    console.log(jsonText);

結果如圖:


2.字串縮排

第三個引數就是用來實現字串縮排的,數字幾就表示縮排幾個空格

var myMes= {
        "name": "ys",
        "age": 12,
        "like": "drink",
        "nationality": "China"
    };
    var jsonText = JSON.stringify(myMes, ["name", "age"], 4);
    console.log(jsonText);//{"name": "ys", "age": 12}
結果如圖:

如果不加第三個引數的話效果:


二、JSON解析

1.作用

  解析JSON格式的字串

2.語法

  JSON.parse(s[, reviver])

3.引數

  s,要解析的字串

  reviver,可選引數,用來轉換解析值的可選函式

4.返回

  一個物件、陣列或原始值。該返回值是從s中解析的(還有可能被reviver修改過);

看一個例子先:
 var myMes= {
        "name": "ys",
        "age": 12
    }; 
    console.log(typeof myMes);//Object
    //為了模擬json字串
    var jsonText = JSON.stringify(myMes);
    console.log(typeof jsonText);//String

    var jsonObj = JSON.parse(jsonText);
    console.log(typeof jsonObj);//Object

作用是將json字串轉化為json物件 
型別變化:String -> Object
JSON.parse()方法也接收另一個引數,該引數是一個函式,為了區別JSON.string()接收的過濾函式,這個函式被叫做還原函式(reviver),實際上兩個函式的鍵值是相同的——他們都接受兩個引數,並且都需要返回一個值。 提供幾個寫得比較清楚的部落格連結: 開啟連結