关键词:
- 首先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 object if(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))()
json.parse()与json.stringify()
JSON.parse()将字符串转成JSON举个例子varstr=‘{"name":"cn","age":"2"}‘JSON.parse(str)结果:Objectage:"2"name:"cn"__proto__:Object注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。 JSON.stringify将JSON对象转换为字符串vara={a:1,... 查看详情
通过json.stringfy()和json.parse(),实现对象或者数组深拷贝
JavaScript中对象或者数组等引用类型,直接拷贝,改变一个另外一个也会改变; 下列代码在浏览器控制台执行:vararr=[1,2,3];vararr1=arr;arr1.push(4);console.log(arr);//[1,2,3,4]console.log(arr1);//[1,2,3,4] 通过JSON.stringfy( 查看详情
原生js中的常用方法的写法
1、js深度克隆的方法//第一种functiondeepClone(obj){varstr,newObj=objinstanceofArray?[]:{};if(typeofobj!==‘object‘){return;}elseif(window.json){str=JSON.stringify(obj);newObj=JSON.parse(str);}else{for(variinobj){n 查看详情
ReactJS 和 Node.JS [JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符]
】ReactJS和Node.JS[JSON.parse:JSON数据的第1行第1列出现意外字符]【英文标题】:ReactJSandNode.JS[JSON.parse:unexpectedcharacteratline1column1oftheJSONdata]【发布时间】:2020-01-1118:58:40【问题描述】:我对这段代码感到困惑,所以我需要第三眼来寻... 查看详情
React JS:this.setState 和 JSON.parse
】ReactJS:this.setState和JSON.parse【英文标题】:ReactJS:this.setStateandJSON.parse【发布时间】:2018-07-2120:50:57【问题描述】:我有一个问题,我不知道如何解决它。我正在向我的api发出请求,它以这样的对象响应:"_id":"5a806648300caf0072c725... 查看详情
json.stringify(),json.parse(),tojson()方法使用
...ng,Number...)序列化为JSON字符串JSON.parse():将JSON数据解析为js原生值toJSON(),作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。假设把一个对象传入JSON.stringify()序列化对象的顺序如下:(1)如果存在toJSON()方法而且能 查看详情
json.parse(json.stringify())实现对对象的深拷贝(代码片段)
JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了就是利用JSON.stringify将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射... 查看详情
js数组使用json.stringify和tostring的区别
js中eval()和$.parseJSON()的区别以及JSON.stringify()1.第一个区别是:安全性json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢?JSON.parse()之可以解析json格式的数据,并且会对要解... 查看详情
node.js JSON.parse reviver 不报告重复键?
】node.jsJSON.parsereviver不报告重复键?【英文标题】:node.jsJSON.parsereviverdoesn\'treportduplicatekeys?【发布时间】:2015-04-2220:49:27【问题描述】:我正在尝试使用JSON解析器来检测和保存重复键。我在node.js中使用JSON.parse()和一个reviver,... 查看详情
保存语法和 JSON.parse 代码时出错
】保存语法和JSON.parse代码时出错【英文标题】:Errorwhilesavingsyntax,andJSON.parsecode【发布时间】:2019-11-1417:03:36【问题描述】:constDiscord=require(\'discord.js\');constbot=newDiscord.Client();letcofig=require(\'./botconfig.json\');lettoken=config 查看详情
js中json.stringify()与json.parse()与eval()详解及使用案例
...机器解析和生成(一般用于网络传输速率)。 (1)JSON.parse函数 作用:将json字符串转换成json对象。语法:JSON.&n 查看详情
标签页(tab)切换的原生js,jquery和bootstrap实现
...课程Tab选项卡切换效果时做的总结和练手。原课程中只有原生js实现,jquery和bootstrap实现是我自己补上的。本节内容标签页(tab)切换的原生js实现标签页(tab)切换的jquery实现标签页(tab)切换的bootstrap实现标签页(tab)切换... 查看详情
json的序列化和反序列化eval()和parse()方法以及stringfy()方法
1、json解析的方法有两种:eval()和parse()方法eval()较危险,不光解析了字符串,还解析了js方法,无论何时用eval()都是非常危险的。-----不建议使用JSON.parse()较好,会解析出错误。例子[加上圆括号的目的是迫使eval函数在处理JavaScrip... 查看详情
`json.parse(json.stringfy())`进行深拷贝方法小结
...N字符串反序列化为一个js对象,通过这两个方法,也可以实现对象的深复制。用法简单,然而使用这种方法会有一些隐藏的坑:因为在序列化JavaScript对象时,所有函数和 查看详情
浅谈js中的json.stringify()和json.parse()
参考技术A我们知道,JSON.stringify()和JSON.parse()是一对处理JSON数据的方法,前者是将JSON对象序列化为字符串,而后者是将JSON字符串解析为JSON对象。但是你有较为深入地去了解过它们吗?它们分别可以传入几个参数以及每个参数对... 查看详情
原生js实现jquery的addclass和removeclass
代码如下:document.getElementById("btn").classList.add("active");document.getElementById("btn").classList.remove("active"); 查看详情
json.parse()和json.stringify()
JSON.parse()和JSON.stringify():parse用于从一个字符串中解析出json对象,如下:varstr=‘{"name":"huangxiaojian","age":"23"}‘结果:JSON.parse(str) Objectage: "23"name: "huangxiaojian"__proto__: Objectstringi 查看详情
原生js实现删除class和添加class
内容来自百度搜索//判断样式是否存在functionhasClass(ele,cls){ returnele.className.match(newRegExp("(\s|^)"+cls+"(\s|$)"));}//为指定的dom元素添加样式functionaddClass(ele,cls){ if(! 查看详情