当前位置: 首页 > 编程笔记 >

深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

吴英武
2023-03-14
本文向大家介绍深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解,包括了深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解的使用技巧和注意事项,需要的朋友参考一下

“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:

var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json);  //解析为JSON对象
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:

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

(3)eval()函数

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

语法:eval(string)

参数:

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

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

example:

eval("x=;y=;document.write(x*y)"); //output为
document.write(eval("+"));  //output为
var x=;
document.write(eval(x+));  //output为

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

// JSON.parse()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json);    //解析为JSON对象
document.write(info); //output为[object Object]
//eval()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = eval('(' + json + ')'); //解析为JSON对象
document.write(info); //output为[object Object]

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

原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同

alert(eval("{}")); // return undefined
alert(eval('('+'{}'+')')); // return object[Object] 

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

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

  如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题,可见,虽然eval()功能很强大,但是实际用到的机会并不多。

  个人总结的时候到了,这是我人生第一篇的博客,在4月1号Fool's Day诞生,写得不好的地方还希望各位多多见谅,现在技术非常渣,我很希望现在能够一点一滴去积累知识,为日后的成功奠定好基础,fighting~

 类似资料:
  • 本文向大家介绍浅谈JSON.parse()和JSON.stringify(),包括了浅谈JSON.parse()和JSON.stringify()的使用技巧和注意事项,需要的朋友参考一下 1.parse 用于从一个字符串中解析出json 对象。例如 var str='{"name":"cpf","age":"23"}' 经 JSON.parse(str) 得到: ps:单引号写在{}外,每个属性都

  • 问题内容: 我正在随处使用,并且可以在Firefox上正常使用。它不再与IE9一起工作,也不再在IE8中工作。我能做什么? 问题答案: 为什么要依赖具有对象的浏览器,而不是只包含Douglas Crockford的脚本文件。您可以在这里找到缩略文件:http : //www.json.org/js.html 导入后,您不必担心浏览器中现有的方法。

  • 本文向大家介绍JSON.parse()和JSON.stringify()使用介绍,包括了JSON.parse()和JSON.stringify()使用介绍的使用技巧和注意事项,需要的朋友参考一下 parse用于从一个字符串中解析出json对象,如 结果: 注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。 stringify()用于从一个对象解析出字符串,如 结果: PS:关于js

  • 本文向大家介绍详解关于JSON.parse()和JSON.stringify()的性能小测试,包括了详解关于JSON.parse()和JSON.stringify()的性能小测试的使用技巧和注意事项,需要的朋友参考一下 JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了,就是利用 JSON.stringify 将js对象序列化(JSON字符串),再使用J

  • 本文向大家介绍深入浅析Python中join 和 split详解(推荐),包括了深入浅析Python中join 和 split详解(推荐)的使用技巧和注意事项,需要的朋友参考一下 python join 和 split方法简单的说是:join用来连接字符串,split恰好相反,拆分字符串的。 .join()   join将 容器对象 拆分并以指定的字符将列表内的元素(element)连接起来,返回

  • 问题内容: 我的Spider Sense警告我,使用解析传入的JSON是一个坏主意。我只是想知道-我假设它是JavaScript的一部分而不是浏览器特定的功能- 是否更安全。 问题答案: *如果使用, *您将更容易受到攻击:JSON是Javascript的子集,而json.parse仅解析JSON,而这却为所有JS表达式敞开了大门。

  • 本文向大家介绍深入浅析JavaScript中的作用域和上下文,包括了深入浅析JavaScript中的作用域和上下文的使用技巧和注意事项,需要的朋友参考一下 javascript中的作用域(scope)和上下文(context)是这门语言的独到之处,这部分归功于他们带来的灵活性。每个函数有不同的变量上下文和作用域。这些概念是javascript中一些强大的设计模式的后盾。然而这也给开发人员带来很大困

  • 问题内容: 我对于何时使用这两种解析方法感到困惑。 在回显我的json_encoded数据并通过ajax将其检索回去之后,我常常会困惑何时应该使用 JSON.stringify 和 JSON.parse 。 我得到我 的console.log 字符串化时解析和JavaScript对象时。 问题答案: 将JavaScript对象转换为JSON文本并将该JSON文本存储在字符串中,例如: 将JSON文