JSON.parse()、JSON.stringify()和eval()的作用

  相信大家对于JSON应该不陌生,度娘对这个名词的解释大致如下:

  “JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使JSON成为理想的数据交换语言,作用是易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。”  

  今天在这里笔者想简单谈谈jquery里面的JSON.parse()和JSON.stringify()函数,顺便还会提一下原生JS里面的eval()函数

(1)JSON.parse 函数

作用:将 JavaScript 对象表示法 (JSON) 字符串转换为对象。  

语法:JSON.parse(text [, reviver])

参数:

  • text  必需。 一个有效的 JSON 字符串。
  • reviver  可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。

返回值:一个对象或数组

example:

1 var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘;
2 var info = JSON.parse(json);  //解析为JSON对象
3 document.write(info.name + ‘ is a student of ‘ + info.University + ‘ and he is ‘ + info.age + " years old."); /info为Object对象

(2)JSON.stringify()函数

作用:将 JavaScript 值转换为 JavaScript 对象表示法 (JSON) 字符串

语法:JSON.stringify( value [, replacer] [, space])

参数:

  • value  必需,通常为需要转换的JavaScript值(通常为对象或者数组)
  • replacer  可选,用于转换结果的函数或者数组
  • space  可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。

返回值:一个包含JSON文本的字符串

example:

1 var info = {name:"GDT",age:23,University:"GDUT"};
2 var json = JSON.stringify(info); //转换为JSON字符串
3 document.write(json); //output为{"name":"GDT","age":23,"University":"GDUT"}

  

(3)eval()函数

作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

语法:eval(string)

参数:

  • string  必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

返回值:返回计算string的值,如果有的话 (没有则不做任何改变返回)

example:

1 eval("x=10;y=20;document.write(x*y)");  //output为200
2 document.write(eval("2+2"));  //output为4
3 var x=10;
4 document.write(eval(x+17));  //output为27

  使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码

1 // JSON.parse()
2 var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘;
3 var info = JSON.parse(json);    //解析为JSON对象
4 document.write(info);            //output为[object Object]
5
6 //eval()
7 var json = ‘{"name":"GDT","age":23,"University":"GDUT"}‘;
8 var info = eval(‘(‘ + json + ‘)‘);  //解析为JSON对象
9 document.write(info);            //output为[object Object]

  不知道大家有木有注意到eval()还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是:

  • 原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
  • 解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同
1 alert(eval("{}"));             // return undefined
2 alert(eval(‘(‘+‘{}‘+‘)‘));     // return object[Object] 

  另外,相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。比如以下代码:

1 var str1 = ‘{"a":"b"}‘;
2 document.write(eval("("+str1+")"));   //正常解析为对象
3 var str2 = ‘{"a": (function(){alert("I can do something bad!");})()}‘;
4 eval(‘(‘+str2+‘)‘);                   //可以用来执行木马脚本  

原文地址:https://www.cnblogs.com/Kirins/p/10485780.html

时间: 2024-10-19 16:16:59

JSON.parse()、JSON.stringify()和eval()的作用的相关文章

浅谈JSON.parse()、JSON.stringify()和eval()的作用

相信大家对于JSON应该不陌生,度娘对这个名词的解释大致如下: “JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使JSON成为理想的数据交换语言,作用是易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率).” 今天在这里笔者想简单谈谈jquery里面的JSON.parse()和JSON.stringify()函数,顺便

关于vue中JSON.parse(JSON.stringify(...))使用深拷贝问题

一般我们单独用JSON.parse()或JSON.stringify() 今天在学vue看到JSON.parse(JSON.stringify(...))的用法,这里研究一下: 首先分别说下他们的用法: JSON.parse()  是将字符串中的对象解析出来 例:  var str = "{'name':'huahua','age':'22'}";  JSON.parse(str); var obj = {name:"hua",age: 26};  JSON.str

JSON.parse JSON.stringify

JSON.stringify() undefined 值.函数或者XML值会被忽略 数组当中含有 undefined值,函数或XML值,该数组中的这些值将会被当成 null 正则对象会被转成空对象 JSON.stringify 方法会忽略对象的不可遍历属性 JSON.stringify 方法会忽略对象的不可遍历属性 JSON.stringify方法还可以接受一个数组参数,指定需要转成字符串的属性. JSON.stringify 方法还可以接受一个函数作为参数,用来更改默认的字符串化的行为. JS

JSON.parse()——json转JS

JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象. 语法 JSON.parse(text[, reviver]) 参数说明: text:必需, 一个有效的 JSON 字符串. reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数. JSON 解析实例 例如我们从服务器接收了以下数据: { "name":"runoob", "al

JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法

摘自:https://www.cnblogs.com/whh412/p/5627088.html 1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 1 2 3 var str = '[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","act

JSON.parse() 和 JSON.stringify()的简单介绍

参考地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify 最近一段时间在测试前端页面的时候, 需要对后台数据进行处理, 后台返回的数据基本都是json格式, 这里就要用到

JSON.parse()与JSON.stringify()高级用法

JSON.parse()与JSON.stringify是将JSON对象与字符串互相转换的方法,它们还有一些参数可以让我们在实际应用中更加方便,现在介绍一下它们的高级用法 JSON.parse() JSON.parse(jsonString, (key, value) => {}) 可以接受两个参数,第一个就是我们已经熟悉的json字符串,第二个是一个回调函数,我们可以对返回的每一个value做处理,然后返回对应的value const testJSON = { name: 'test', val

关于JSON.stringify()与JSON.parse()

一.JSON.stringify()与JSON.parse()的区别 JSON.stringify()的作用是将js值转换成JSON字符串,而JSON.parse()是将JSON字符串转换成一个对象.也就是说,如果我们用JSON.stringify()将一个对象变成了字符串,那么使用JSON.parse()将字符串还原成对象. let obj = { name:"song", age:10 }; let changeObj =JSON.stringify(obj); console.l

eval()和JSON.parse()的区别

我们将一个字符串解析成json对象时可以使用两种方法: 假设我们有一个json格式的字符串: '{ "student" : [ {"name":"鸣人","age":17}, {"name":"小樱","age":17}, {"name":"佐助","age":17} ] }' 然后我们需要把它解析成json