摘要:用于把對(duì)象序列化字符串,在序列化對(duì)象時(shí),所有函數(shù)及原型成員都會(huì)被有意忽略,不體現(xiàn)在結(jié)果中。對(duì)第步返回的每個(gè)值進(jìn)行相應(yīng)的序列化。參考文檔高級(jí)程序設(shè)計(jì)作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。
JSON與JavaScript對(duì)象
JSON是一種表示結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)格式,語(yǔ)法格式上與JavasScript對(duì)象有些類似。
TIPS: 與JavaScript對(duì)象的格式區(qū)別
不支持變量、函數(shù)或?qū)ο髮?shí)例
字符串,屬性名必須使用雙引號(hào)
無(wú)需定義變量存儲(chǔ)引用
// JSON對(duì)象 { "name": "KenTsang", "age": 27, "job": "Developer" } // js對(duì)象(該對(duì)象將作在后續(xù)例子引用) let person = { name: "KenTsang", age: 27, job: "Developer" }
ES5定義了一個(gè)全局對(duì)象JSON,IE8+以上支持,該對(duì)象提供來(lái)stringify和parse兩個(gè)方法用于JSON數(shù)據(jù)解析和序列化。
stringify()stringify用于把JavaScript對(duì)象序列化JSON字符串,
在序列化JavaScript對(duì)象時(shí),所有函數(shù)及原型成員都會(huì)被有意忽略,不體現(xiàn)在結(jié)果中。此外,值為undefined的任何屬性也都會(huì)被跳過。
JSON.stringify( value: Object, replace: Array | function(key,value) {}, space: number | string )
該方法接受三個(gè)參數(shù)
參數(shù):接收傳入的js對(duì)象
參數(shù):過濾器(數(shù)組/函數(shù))
參數(shù):字符串縮進(jìn)(數(shù)值/字符串)
參數(shù)2 - 過濾器TIPS1: 過濾器是一個(gè)數(shù)組時(shí),序列化結(jié)果只包含數(shù)組中列出的屬性
let result = JSON.stringify(person, ["name", "job"]); // 輸出結(jié)果 // {"name":"KenTsang","job":"Developer"}
TIPS2: 過濾器是一個(gè)函數(shù)時(shí)(替換函數(shù))
var jsonStr = JSON.stringify(Person, function(key, value){ if (key == "age") { return "secret"; } else { return value; } }) // 輸出結(jié)果 // {"name":"KenTsang","age":"secret","job":"Developer"}
如果替換函數(shù)返回的是undefined,則該屬性不會(huì)被包含在序列化結(jié)果中。
參數(shù)3 - 字符串縮進(jìn)用于控制序列化結(jié)果中的縮進(jìn)和空白符,輸出序列結(jié)果帶縮進(jìn)格式,方便預(yù)覽查看。實(shí)際應(yīng)用開發(fā)不多。
為數(shù)值時(shí),表示每個(gè)級(jí)別縮進(jìn)的空格數(shù)(最大10)
為字符串時(shí),則作為縮進(jìn)字符(替換默認(rèn)的空格,最大10個(gè)字符)
let result = JSON.stringify(person, null, "--"); // 輸出結(jié)果 /* { --"name": "KenTsang", --"age": 27, --"job": "Developer" } */toJSON()方法
應(yīng)對(duì)更復(fù)雜的一些需求,我們可以通過toJSON()對(duì)某些對(duì)象進(jìn)行自定義序列化的需求。
let person = { name: "KenTsang", age: 27, job: "Developer", toJSON: function() { return { "name": "KT", "age": "2*", "job": "DP" } } }; let result = JSON.stringify(person); // 輸出結(jié)果 // {"name":"KT","age":"2*","job":"DP"}
TIPS: 序列化順序
parse()如果存著toJSON方法而且能通過它取得有效的值,則調(diào)用該方法。否則,返回對(duì)象本身。
如果提供了第二個(gè)參數(shù),應(yīng)用這個(gè)函數(shù)過濾器。傳入函數(shù)過濾器的值是第(1)步的值。
對(duì)第(2)步返回的每個(gè)值進(jìn)行相應(yīng)的序列化。
如果提供了第三個(gè)參數(shù),執(zhí)行相應(yīng)的格式化。
-- 摘自《JavaScript高級(jí)程序設(shè)計(jì)》--
parse用于把JSON字符串解析成JavaScript對(duì)象
JSON.parse(text: string, reviver: function(key, value) {})
該方法接受三個(gè)參數(shù)
參數(shù):接收傳入的json字符串
參數(shù):還原函數(shù)
還原函數(shù)返回undefined, 結(jié)果中刪除相應(yīng)的鍵
返回其它值,則將值插入到結(jié)果中
let Person = { name: "KenTsang", age: 27, job: "Developer", birth: new Date(1991, 3, 19) }; var jsonStr = JSON.stringify(Person); var jsObj = JSON.parse(jsonStr, function(key, value) { if (key == "birth") { return new Date(value); } else { return value); } }); jsObj.birth.getFullYearh(); // 輸出結(jié)果: 1991
例子中通過還原函數(shù),重新實(shí)例一個(gè)Date對(duì)象,所以可以用到getFullYear()方法。
參考文檔
《JavaScript高級(jí)程序設(shè)計(jì)》
作者:以樂之名
本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。轉(zhuǎn)載請(qǐng)指明出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99641.html
摘要:解耦優(yōu)勢(shì)代碼復(fù)用,單元測(cè)試。常用比較誤區(qū)可同時(shí)判斷,可用來(lái)判斷對(duì)象屬性是否存在。使用作判斷無(wú)法進(jìn)行充分的類型檢查。文件中應(yīng)用常量參考文檔高級(jí)程序設(shè)計(jì)作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXw?w=500&h=400); 編寫可維護(hù)性代碼 可維護(hù)的代碼遵循原則: 可理解性 (方便他人理解) 直觀...
摘要:文件內(nèi)部使用使用到的代碼引入外部文件外部代碼的地址標(biāo)簽的位置一般情況下,標(biāo)簽的位置放在標(biāo)簽中引入代碼頁(yè)面結(jié)構(gòu)對(duì)于需要引入很多的中間,如果把放在頭部,無(wú)疑會(huì)導(dǎo)致瀏覽器呈現(xiàn)頁(yè)面出現(xiàn)延遲,就是導(dǎo)致頁(yè)面出現(xiàn)空白。頁(yè)面結(jié)構(gòu)引入代碼 這篇筆記的內(nèi)容對(duì)應(yīng)的是《JavaScript高級(jí)程序設(shè)計(jì)(第三版)》中的第二章。 1.使用方式 在HTML中使用 JavaScript 的方式有兩種,第一種就是直接內(nèi)...
摘要:由于計(jì)算機(jī)的國(guó)際化,組織的標(biāo)準(zhǔn)牽涉到很多其他國(guó)家,因此組織決定改名表明其國(guó)際性。規(guī)范由萬(wàn)維網(wǎng)聯(lián)盟制定。級(jí)標(biāo)準(zhǔn)級(jí)標(biāo)準(zhǔn)是不存在的,級(jí)一般指的是最初支持的。 這篇筆記的內(nèi)容對(duì)應(yīng)的是《JavaScript高級(jí)程序設(shè)計(jì)(第三版)》中的第一章。 1.ECMA 和 ECMA-262 ECMA 是歐洲計(jì)算機(jī)制造商協(xié)會(huì)的縮寫,全程是 European Computer Manufacturers Ass...
摘要:函數(shù)類型檢測(cè)是的子類型,其屬性為參數(shù)個(gè)數(shù),但是判斷結(jié)果有內(nèi)建函數(shù)原生函數(shù)常見的有,可能被當(dāng)作構(gòu)造函數(shù)來(lái)使用,創(chuàng)建出來(lái)的是封裝了的基本類型值。構(gòu)造函數(shù)可以不帶關(guān)鍵字。建議使用和來(lái)進(jìn)行顯示強(qiáng)制轉(zhuǎn)換。 前言 此篇小結(jié)來(lái)源與《你不知道的JavaScript》和《JavaScript高級(jí)程序設(shè)計(jì)》的結(jié)合??或許是的,龜速總結(jié)中... 七種內(nèi)置類型 null undefined boolean ...
摘要:表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁(yè)面中的其他操作可選。表示通過屬性指定的代碼的字符集。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。實(shí)際上,服務(wù)器在傳送文件時(shí)使用的類型通常是,但在中設(shè)置這個(gè)值卻可能導(dǎo)致腳本被忽略。 第1章 JavaScript 簡(jiǎn)介 雖然JavaScript和ECMAScript通常被人們用來(lái)表達(dá)相同的含義,但JavaScript的含義比ECMA-262要多得多...
閱讀 1096·2021-11-23 10:11
閱讀 3944·2021-11-16 11:50
閱讀 1019·2021-10-14 09:43
閱讀 2771·2021-10-14 09:42
閱讀 2800·2021-09-22 16:02
閱讀 1127·2019-08-29 10:57
閱讀 3432·2019-08-29 10:57
閱讀 2350·2019-08-26 13:52