JSON.stringify()、eval(),JSON.parse()各自的区别于作用

前端之家收集整理的这篇文章主要介绍了JSON.stringify()、eval(),JSON.parse()各自的区别于作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
JSON.stringify(value [,replacer] [,space])
 
 
value

必需。要转换的 JavaScript 值(通常为对象或数组)。

replacer

可选。用于转换结果的函数或数组。

如果replacer函数,则JSON.stringify调用函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:""。

如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。value参数也为数组时,将忽略replacer数组。

space

可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。

如果省略space,则将生成返回值文本,而没有任何额外空格。

如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格。如果space大于 10,则文本缩进 10 个空格。

如果space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。

如果space是长度大于 10 个字符的字符串,则使用前 10 个字符。

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

JSON.stringify()、eval()都是用来解析字符串并将字符串转换为json数据

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

var evalJson=eval('('+jsonData+')');

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行

var jsonParseJson=JSON.parse(jsonData);

这样就把json格式的字符串转化为json对象

但二者解析是由区别的

var value = 1;

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

var data1 = eval_r('('+jsonstr+')');console.log(data1);//这时value值为2

而var data2=JSON.parse(jsonstr);console.log(data2);//报错

总结:eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),

如上例中,由于用eval解析一个json字符串而造成原先的value的值改变这是极其不安全的,

很容易被恶意的用户在json字符串注入木马链接

所以推荐使用JSON.parse()来解析字符串

方法不仅可以捕捉JSON中的语法错误,并且允许你传入一个函数,用来过滤或转换解析结果

原文链接:https://www.f2er.com/json/289857.html

猜你在找的Json相关文章