日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

原生js实现JSON.parse()和JSON.stringify()

發布時間:2024/4/17 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原生js实现JSON.parse()和JSON.stringify() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

- 首先JSON.stringify()是將js對象轉換為JSON形式

實現思路:

通過遞歸調用,來實現對轉換對象Object的深層value進行遍歷,利用array的join實現最終字符串拼接

function myJsonStringify(obj) {let type = typeof obj;if (type !== "object" || type === null) {if (/string|undefined|function/.test(type)) {obj = '"' + obj + '"';}return String(obj);} else {let json = [],arr = (obj && obj.constructor === Array);for (let k in obj) {let v = obj[k];let type = typeof v;if (/string|undefined|function/.test(type)) {v = '"' + v + '"';} else if (type === "object") {v = myJsonStringify(v);}json.push((arr ? "" : '"' + k + '":') + String(v));}return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}")}}

一個較為完整版的實現:

(function(NS){ var simpleTypes=["number","boolean","undefined","string","function"] function stringify(object){var type=typeof objectif(indexOf(simpleTypes,type)>-1){return parseSimpleObject(object);}if(object instanceof Array){var len=object.length;var resArr=[];for(var i=0;i<len;i++){var itemType=typeof object[i];if(indexOf(simpleTypes,itemType)>-1){if(itemType!="undefined"){resArr.push(parseSimpleObject(object[i]));}else{resArr.push('null')}}else{resArr.push(stringify(object[i]))}}return "["+resArr.join(",")+ "]"}if(object instanceof Object){if(object==null){return "null"}var resArr=[]for(var name in object){var itemType=typeof object[name];if(indexOf(simpleTypes,itemType)>-1){if(itemType!='undefined'){resArr.push("\"" + name + "\":" + parseSimpleObject(object[name]))}}else{resArr.push("\"" + name +"\":" +stringify(object[name]))}}return "{" +resArr.join(",") +"}"} } function parseSimpleObject(object){var type=typeof object;if(type=="string"||type=="function"){return "\"" + object.toString().replace("\"","\\\"") + "\""}if(type=="number"||type=="boolean"){return object.toString()}if(type=="undefined"){return "undefined"}return "\"" +object.toString().replace("\"","\\\"") +"\"" } function indexOf(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]===val){return i;}}return -1 } NS.stringify=function(object,isEncodeZh){var res=stringify(object)if(isEncodeZh){var encodeRes="";for(var i=0;i<res.length;i++){if(res.charCodeAt(i)<Oxff){encodeRes+=res[i]}else{encodeRes+="\\u"+res.charCodeAt(i).toString(16);}}res=encodeRes}return res; } })(window);

JSON.parse()是將JSON對象轉換為js對象

實現方式:(2種)

eval()

var json='{"a":"1","b":2}'var obj=eval("("+json+")");

直接調用eval,會產生xss漏洞。

利用new Function()

第一種eval的方法,相當于無腦把JSON字符串塞進去,eval和Function都有著動態編譯js代碼的作用

var func=new Function(arg1,arg2,...,functionBody) var jsonStr='{"age":20,"name":"jack"}' var json=(new Function('return'+jsonStr))()

?

轉載于:https://www.cnblogs.com/yuan233/p/10986714.html

總結

以上是生活随笔為你收集整理的原生js实现JSON.parse()和JSON.stringify()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。