JSON.parse() 函数
作用: 将JavaScript 对象表示法(json)字符串转换成对象
语法: JSON.parse(text, [,reviver])
参数: text: 必需, 一个有效的 json 字符串
reviver: 可选。 一个转换结果的函数。 将为对象的每个成员调用此函数
返回值: 返回一个对象或者数组
var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘; var info = JSON.parse(json); //解析为JSON对象 console.log(json) // 结果 {"name":"GDT","age":23,"University":"GDUT"}
console.log(typeof info) // 结果 object
JSON.stringify() 函数
作用: 将 JavaScript 值转换为 JavaScript 对象的表达式(JSON) 字符串 与 JSON.parse作用相反
语法: JSON.stringify(value, [,replacer] [,space])
参数:
value: 必需,通常为需要转换的JavaScript值(通常为对象或者数组)
replacer: 可选,用于转换结果的函数或者数组
space: 可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。
返回值:一个包含JSON文本的字符串
var json = {"name":"GDT","age":23,"University":"GDUT"} var info = JSON.stringify(json) // 解析为JSON字符串 console.log(info) // 结果 {"name":"GDT","age":23,"University":"GDUT"}
console.log(typeof info) // string
JSON.parse(JSON.stringify(row)) 可以结合使用
JSON.parse(JSON.stringify(obj))
我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输(例如 如果请求的Content-Type
是 application/x-www-form-urlencoded
,则前端这边需要使用qs.stringify(data)
来序列化参数再传给后端,否则后端接受不到; ps: Content-Type
为 application/json;charset=UTF-8
或者 multipart/form-data
则可以不需要 );我们在使用 JSON.parse(JSON.stringify(xxx))
时应该注意一下几点:1、如果obj里面有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式。而不是时间对象;
作者:该帐号已被查封_才怪
链接:https://www.jianshu.com/p/b084dfaad501
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
eval() 函数
作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:eval(string)
参数:
string: 必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值:返回计算string的值,如果有的话 (没有则不做任何改变返回)
使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码
// JSON.parse() var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘; var info = JSON.parse(json); //解析为JSON对象 document.write(info); //output为[object Object] //eval() var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘; var info = eval(‘(‘ + json + ‘)‘); //解析为JSON对象 document.write(info); //output为[object Object]
不知道大家有木有注意到eval()还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是:
原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。