當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
原生js实现JSON.parse()和JSON.stringify()
生活随笔
收集整理的這篇文章主要介紹了
原生js实现JSON.parse()和JSON.stringify()
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 首先JSON.stringify()是將js對象轉(zhuǎn)換為JSON形式
實現(xiàn)思路:
通過遞歸調(diào)用,來實現(xiàn)對轉(zhuǎn)換對象Object的深層value進行遍歷,利用array的join實現(xiàn)最終字符串拼接
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 ? "]" : "}")}}一個較為完整版的實現(xiàn):
(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對象轉(zhuǎn)換為js對象
實現(xiàn)方式:(2種)
eval()
var json='{"a":"1","b":2}'var obj=eval("("+json+")");直接調(diào)用eval,會產(chǎn)生xss漏洞。
利用new Function()
第一種eval的方法,相當(dāng)于無腦把JSON字符串塞進去,eval和Function都有著動態(tài)編譯js代碼的作用
var func=new Function(arg1,arg2,...,functionBody) var jsonStr='{"age":20,"name":"jack"}' var json=(new Function('return'+jsonStr))()?
轉(zhuǎn)載于:https://www.cnblogs.com/yuan233/p/10986714.html
總結(jié)
以上是生活随笔為你收集整理的原生js实现JSON.parse()和JSON.stringify()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter与ant整合生成美观的测试报
- 下一篇: Django基础核心技术之Model模型