摘要:實例用解析函數字符串排名除了,以下二種方法也可以將字符串轉化為對象。實例解析函數不允許包含函數,會刪除對象的函數,包括和。
JSON.parse()
1、我們可以使用 JSON.parse() 方法將數據轉換為 JavaScript 對象。
語法
JSON.parse(text[, reviver])
參數說明:
?text:必需, 一個有效的 JSON 字符串。 ?reviver:?可選,一個轉換結果的函數, 將為對象的每個成員調用此函數。
2、JSON 解析實例
使用 JSON.parse 的 reviver 函數時一定要注意遍歷到最后的頂層對象 key 為 "",需要返回 value。不然報錯
var json = "{"name":"Harvy", "age":36, "gender":"male"}"; var person = JSON.parse(json, function (key, value) { if(key != "") return ""+value+""; else return value; });
JSON 不能存儲 Date 對象。// Sat Dec 14 2013 08:00:00 GMT+0800 (中國標準時間)
如果你需要存儲 Date 對象,需要將其轉換為字符串。// 2013-12-14
之后再將字符串轉換為 Date 對象。// new Date(“2013-12-14”);
我們可以啟用 JSON.parse 的第二個參數 reviver,一個轉換結果的函數,對象的每個成員調用此函數。
實例
var text = "{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}"; var obj = JSON.parse(text, function (key, value) { if (key == "initDate") { return new Date(value);//將日期字符串轉換為 Date 對象 } else { return value; } }); //Sat Dec 14 2013 08:00:00 GMT+0800 (中國標準時間) document.getElementById("demo").innerHTML = obj.name + "創建日期:" + obj.initDate;
3、解析函數
JSON 不允許包含函數,但你可以將函數作為字符串存儲,之后再將函數字符串用eval解析。
實例
var text = "{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}"; var obj = JSON.parse(text); obj.alexa = eval("(" + obj.alexa + ")"); //用eval解析函數字符串 document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa();
4、eval()
除了JSON.parse(),以下二種方法也可以將json字符串轉化為json 對象。
var str1 = "{ "name": "deyuyi", "sex": "man" }"; console.log(eval("("+str1+")")); console.log((new Function("","return "+str1))()); //str1 = { "name": "deyuyi", "sex": "man" }
Eval
由于json是以”{}”的方式來開始以及結束的,在JS中,{}會被當成一個語句塊來處理,加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。
console.log(eval("{}"));// return undefined console.log(eval("({})"));// return object[Object]
將age的值換成了Javascript代碼,eval依然可以解析,假如有人惡意修改這個代碼,那么就會造成嚴重后果。
//例如:
var jsonData = "{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":alert("hehe")},{"name":"佐助","age":17}]}";
//先彈出一個提示框輸出hehe的字符串~
console.log(eval("("+jsonData+")"));
但JSON.parse會報錯。顯示錯誤信息為當前字符串不符合json格式~即JSON.parse()方法會檢查需要轉換的字符串是否符合json格式~
相比較而言eval方法是很危險的~特別是當涉及到第三方時我們需要確保傳給eval的參數是我們可以控制的~
不然里面插入比如window.location~指向一個惡意的連接~那就不好了
從這個層面講~還是推薦使用JSON.parse來實現json格式字符串的解析。
//會報錯~顯示錯誤信息為當前字符串不符合json格式
console.log(JSON.parse(jsonData));
JSON.stringify()
我們可以使用 JSON.stringify() 方法將 JavaScript 對象轉換為字符串。
1、語法
JSON.stringify(value[, replacer[, space]])
參數說明:
value:
必需, 一個有效的 JSON 對象。
replacer:
可選。用于轉換結果的函數或數組。
如果 replacer 為函數,則 JSON.stringify 將調用該函數,并傳入每個成員的鍵和值。使用返回值而不是原始值。如果此函數返回 undefined,則排除成員。根對象的鍵是一個空字符串:""。
如果 replacer 是一個數組,則僅轉換該數組中具有鍵值的成員。成員的轉換順序與鍵在數組中的順序一樣。當 value 參數也為數組時,將忽略 replacer 數組。
space:
可選,文本添加縮進、空格和換行符,如果 space 是一個數字,則返回值文本在每個級別縮進指定數目的空格,如果 space 大于 10,則文本縮進 10 個空格。space 有可以使用非數字,如:t。
2、JavaScript 對象轉換
實例
var obj = { "name":"runoob", "alexa":10000, "site":"www.runoob.com"}; document.write(obj);//[object Object]? var myJSON = JSON.stringify(obj); document.write(myJSON ); //輸出字符串{"name":"runoob","alexa":10000,"site":"www.runoob.com"}
3、JavaScript 數組轉換
實例
var arr = [ "Google", "Runoob", "Taobao", "Facebook" ]; document.write(arr);//Google,Runoob,Taobao,Facebook var myJSON = JSON.stringify(arr); document.write(myJSON );// [ "Google", "Runoob", "Taobao", "Facebook" ]
4、將Date 對象轉化為字符串
JSON 不能存儲 Date 對象。
JSON.stringify() 會將所有日期轉換為字符串。
實例
var obj = { "name":"Runoob", "initDate":new Date(), "site":"www.runoob.com"}; var myJSON = JSON.stringify(obj.initDate); document.write(myJSON );//"2018-11-08T03:00:40.443Z"
5、解析函數
JSON 不允許包含函數,JSON.stringify() 會刪除 JavaScript 對象的函數,包括 key 和 value。
實例
var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"}; var myJSON = JSON.stringify(obj); document.write(myJSON );//{"name":"Runoob","site":"www.runoob.com"}
我們可以在執行 JSON.stringify() 函數前將函數轉換為字符串來避免以上問題的發生:
實例
var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"}; obj.alexa = obj.alexa.toString(); //將函數轉換為字符串 var myJSON = JSON.stringify(obj); //{"name":"Runoob","alexa":"function () {return 10000;}","site":"www.runoob.com"} document.write(myJSON );
不建議在 JSON 中使用函數。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100642.html
摘要:第一種直接調用避免在不必要的情況下使用,是一個危險的函數,他執行的代碼擁有著執行者的權利。來自于此外,實現需要考慮實例化后對原型鏈的影響。函數柯里化的主要作用和特點就是參數復用提前返回和延遲執行。手寫路徑導航 實現一個new操作符 實現一個JSON.stringify 實現一個JSON.parse 實現一個call或 apply 實現一個Function.bind 實現一個繼承 實現一個J...
摘要:深入理解規則字符串化并非嚴格意義上的強制類型轉換,但其中涉及的相關規則基本類型值的字符串化規則為轉換為,轉換為,轉換為。如果對象有自己的方法,字符串化時就會調用該方法并使用其返回值。將對象強制類型轉換為是通過抽象操作來完成的。 [TOC] 序言 最近在看《你所不知道的javascript》[中卷]一書,第一部分是類型和語法。本文是基于這部分的產物。在強制類型轉換->抽象值操作-> to...
摘要:序列化為字符串之后它的各個屬性已經被解除了引用,重新相當于創建了一個新的對象。類似于的,的命令行終端?;舅悸泛瘮档氖褂靡约皡f議。 多行注釋的陷阱 由于正則表達式字面量的存在,多行注釋可能會產生陷阱,例如以下程序將拋出錯誤: /* var a = /h*/.test(hello); */ 正則結束前的那個星號將被解析為注釋結束符,從而.被認為是不合法的.所以盡量避免使用多行注釋 整型 ...
摘要:雖然構造函數或者對象字面量的方法都可以用來創建對象,但是這些方法使用同一個接口創建很多對象,會產生大量的重復代碼。參考資料冴羽的專題系列中高級前端面試手寫代碼無敵秘籍前端筆試之手寫代碼一本系列會從面試的角度出發圍繞JavaScript,Node.js(npm包)以及框架三個方面來對常見的模擬實現進行總結,具體源代碼放在github項目上,長期更新和維護 showImg(https://use...
摘要:只是一種字符串數據格式,使用它的不僅僅是。對象在中,定義了全局對象。用于把對象序列化為字符串。這個方法可以使我們不必在乎語法與語法的差異,盡管創建合法的對象。用于把字符串序列化為值。 JSON只是一種字符串數據格式,使用它的不僅僅是Javascript。 語法 JSON可以表示三種類型的值:簡單值、對象、數組 簡單值 以下是JSON可以辨識的簡單值例子: 5 Hello World! ...
閱讀 3455·2019-08-30 15:55
閱讀 2054·2019-08-30 15:44
閱讀 1460·2019-08-30 12:47
閱讀 746·2019-08-30 11:05
閱讀 1633·2019-08-30 10:54
閱讀 659·2019-08-29 16:07
閱讀 3572·2019-08-29 14:17
閱讀 2230·2019-08-23 18:31