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 “<font color="blue">"+value+"</font>”; 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 undefinedconsole.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,Facebookvar 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 中使用函数。