JSON.stringify() / JSON.parse()

來源:互聯網
上載者:User

標籤:空格   修改   blog   log   瀏覽器   ons   microsoft   style   function   

JSON.stringify() 這個方法可以把javascript對象轉換成json字串。

JSON.parse() 這個方法可以把 json 字串轉換成 javascript對象。

【下面來看一下這兩個方法的詳細解答】

json資料中沒有變數和結尾的分號,並且資料必須是用雙引號引起來的,單引號會報語法錯誤。

json的資料格式:

{        "name":"chef",        "child":{            "name1":"children",            "age1":[                "one",                "two",                "three"            ],            "hello":"world"        },        "age":33    }

 

JSON.stringify()

  把一段 javascript 對象序列化為 json 字串忽略縮排與空格,並可以把單引號給你改成雙引號,此方法還可以傳入第二個參數,這第二個參數可以是一個數組,也可以是一個函數。如果是數組,那麼數組元素一定要與javascript對象中的鍵相匹配(索引值對的鍵)

如果是一個數組,那麼表示序列化這個數組元素相對應的javascript對象的索引值對

// 此對象貫穿全文var js = {        "name":"chef",        "child":{            "name1":"children",            "age1":[                "one",                "two",                "three"            ],            "hello":"world"        },        "age":33    }    // 把 javascript對象序列化為 json 字串忽略縮排與空格    var js_json = JSON.stringify(js);    console.log(js_json); //{"name":"chef","child":{"name":"children","age":["one","two","three"],"hello":"world"},"age":33}    //序列化選項傳入數組    var js_option = JSON.stringify(js,["child","age"]);    //只序列化了指定的 鍵 :child age    console.log(js_option); //{"child":{"age":["one","two","three"]},"age":33}

 

 

還可以傳入一個函數,這個函數有兩個參數,即(key,value)被序列化的json字串的索引值對,可以在函數的內部改變這些value

//序列化選項 傳入一個函數    var js_fn = JSON.stringify(js,function(key,value){        switch(key){            case "age1":                //把age1的值用逗號分隔成字串                return value.join(",");            case "name1":                //把原來的值替換掉                return "直接把原來的值修改了";            case "hello":                //刪除該索引值對                return undefined;            //沒有default這句擷取不到資料            default:                return value;        }    });    console.log("傳入函數的結果:"+js_fn);    //傳入函數的結果:{"name":"chef","child":{"name1":"直接把原來的值修改了","age1":"one,two,three"},"age":33}

  

  還可以傳入第三個參數,(第二個參數不傳可以寫null) 第三個參數是控制json字串縮排的,它是個數字或字串,數字最多縮排10,如果傳入的大於10則自動轉化為10,如果傳入的是字串,則用這個字串當做縮排符來代替空格

//傳入第三個參數控制字元串縮排    var js_indent = JSON.stringify(js,null,4);    console.log("縮排後的json字串:"+js_indent);    /*    瀏覽器執行效果:         縮排後的json字串:{            "name": "chef",            "child": {                "name1": "children",                "age1": [                    "one",                    "two",                    "three"                ],                "hello": "world"            },            "age": 33         }    */


toJSON()

  定義在javascript對象中,當序列化javascript對象的時候,會先調用toJSON方法然後序列化toJSON返回的值,如果toJSON方法return undefined,那麼這個javascript對象的值就是undefined,如果包含toJSON方法的對象被嵌入在其他的對象裡,那麼包含toJSON方法的對象的值會變為null

var js_tojson = {        name:‘chef‘,        age:‘22‘,        //在javascript對象中這樣定義 toJSON 方法        toJSON:function(){            return {name:this.name,age:this.age};        }    };    //調用stringify()方法序列化對象    var tojsonText = JSON.stringify(js_tojson);    console.log("調用 toJSON 的結果:"+tojsonText) //調用 toJSON 的結果:{"name":"chef","age":"22"}

【序列化的順序是先檢查 javascript對象中是否有 toJSON方法,如果有那麼先執行toJSON方法,返回什麼就序列化什麼】

stringify()參數的執行順序:
  1,第一個參數
  2,檢查toJSON並執行
  3,第二個參數
  4,第三個參數

 

 

JSON.parse()

 

把一段json字串解析為原生javascript值 如果傳給parse()的不是有效json字串,這個方法會拋出錯誤

// 把 json 字串解析為原生javascript值    var json_js = JSON.parse(js_json);    console.log(json_js); // Object {name: "chef", child: Object, age: 33}

parse()方法也有第二個參數,可以給它傳一個函數,這個函數同樣有兩個值,(key,value)這個函數的功能跟 stringify()的第二個函數的功能一樣

    //==== perse() 的第二個參數    var perse_fn = {        name:"chef",        age:66,        newDate: new Date()    }    //先把perse_fn對象轉換成json字串    var perse_json = JSON.stringify(perse_fn);    //再把json字串轉為javascript對象    var perse_js = JSON.parse(perse_json,function(key,value){        switch(key){            case "name":                //可以改變 value                return value+"大廚的筆記";            case "newDate":                //返回時間對象                return new Date();            // 這個 default 必須有,不然就 undefined 了,            default:                return value;        }    });    console.log(perse_js);//Object {name: "chef大廚的筆記", age: 66, newDate: Thu Nov 10 2016 22:52:20 GMT+0800 (中國標準時間)}

以上就是本人對 json 的總結。

 

JSON.stringify() / JSON.parse()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.