JSON中eval与parse的区别

json的的解析方法 (非原创)

json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下:

var jsonData = ‘{"data1":"Hello,", "data2":"world!}‘;

var evalJson=eval_r(‘(‘+jsonData+‘)‘);

var jsonParseJson=JSON.parse(jsonData);

这样就把jsonData这个json格式的字符串转换成了JSON对象。

二者的区别如下:

var value = 1;

var jsonstr = ‘{"data1":"hello","data2":++value}‘;

var data1 = eval_r(‘(‘+jsonstr+‘)‘);console.log(data1);//这时value值为2vardata2=JSON.parse(jsonstr);console.log(data2);//报错

可以看到控制输出台的结果,第一个eval_r()顺利执行,第二个报错了。

从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。

时间: 2024-10-09 16:11:21

JSON中eval与parse的区别的相关文章

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

C#中 Convert与Parse的区别

1.Convert.ToDouble与Double.Parse的区别.实际上Convert.ToDouble与 Double.Parse 较为类似,实际上 Convert.ToDouble内部调用了 Double.Parse: (1)对于参数为null的时候:Convert.ToDouble参数为 null 时,返回 0.0: Double.Parse 参数为 null 时,抛出异常. (2)对于参数为""的时候:Convert.ToDouble参数为 "" 时,抛

【转】C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

package.json中devDependencies与dependencies的区别

前言:之前一直不懂既然都是项目的依赖,为什么要分成两个部分,devDependencies和dependencies,有什么区别? 安装方式 我们在通过npm安装插件或库时,有三种方式: npm install:将插件安装到项目,但不写package.json(不推荐,这样最终需要手动添加) npm install --save:将插件安装进项目,并写入package.json的dependencies中 npm install --save-dev:将插件安装进项目,并写入package.js

js中eval()和$.parseJSON()的区别

之前自己一直对ajax不是特别的熟悉,所以一般都很少用这个去写功能,但是最近这个项目中用到了,用ajax异步传数据,json传数据这个时候就需要去解析传过来的数据了,eval()和$.parseJSON()都是可以解析数据的,但是他们也是有区别的: 1:安全性 例: var str = 'alert(1000.toString())'; eval(str); JSON.parse(str); 用eval可以解析,并且会弹出对话框,而用JSON.parse()则解析不了. 其实alert并没有什么

asp.net中Eval()和Bind()的区别

绑定表达式 <%#  Eval("字段名") %> <%#  Bind("字段名") %> 区别 1.eval是只读数据,Bind是可更新的. 2.当再次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim()%> 3.若GridView中绑定列里面 设置 内容格式 DataFormateString ={0:d} ,则 必须把 属性 HtmlCode 设置为fals

C# Convert与Parse的区别

一.Convert.ToDouble与Double.Parse的区别 Convert.ToDouble 内部调用了 Double.Parse (1)对于参数为null的时候: Convert.ToDouble 参数为 null 时,返回 0.0: Double.Parse 参数为 null 时,抛出异常. (2)对于参数为""的时候: Convert.ToDouble 参数为 "" 时,抛出异常: Double.Parse 参数为 "" 时,抛出

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

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

json.stringify()的妙用,json.stringify()与json.parse()的区别

一.JSON.stringify()与JSON.parse()的区别 最近做项目,发现JSON.stringify()使用场景真的挺多,我们都知道JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串,而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON.stringify()将对象a变成了字符串c,那么我就可以用JSON.parse()将字符串c还原成对象a. let arr = [1,2,3]; JSO