javascript中JSON.parse()与eval()解析json的区别


Posted in Javascript onMay 19, 2016

本文实例讲述了javascript中JSON.parse()与eval()解析json的区别。分享给大家供大家参考,具体如下:

JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据

基本格式:

varjsonData='{"data1":"Hello,","data2":"world!"}'

调用方法jsonData.data1,jsonData.data2

很多json数据存入数组

var jsonData=[
 {"name":"LiLei","age":19,"sex":"male"},
 {"name":"HanMei","age":18,"sex":"famale"}
]

调用方法jsonData[0].name,jsonData[1].sex

总体而言,json是相对比较容易的理解和使用的,但同时存在很多的陷阱,如果不注意的话很容易掉进去。

json的的解析方法

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

var jsonData = '{"data1":"Hello,", "data2":"world!}';
var evalJson=eval('('+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值为2
var data2=JSON.parse(jsonstr);
console.log(data2);//报错

javascript中JSON.parse()与eval()解析json的区别

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

《高性能Javascript》(本站下载地址:https://3water.com/books/36680.html)一书即指出:

警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

更多关于JavaScript相关内容可查看本站专题:《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
用Javscript实现表单复选框的全选功能
May 25 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
浅析JQuery UI Dialog的样式设置问题
Dec 18 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
JS三目运算(三元运算)方法详解
Mar 01 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 Javascript
Node.js API详解之 dgram模块用法实例分析
Jun 05 Javascript
js获取Html元素的实际宽度高度的方法
May 19 #Javascript
js获取隐藏元素宽高的实现方法
May 19 #Javascript
jquery实现无刷新验证码的简单实例
May 19 #Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 #Javascript
JavaScript:Array类型全面解析
May 19 #Javascript
JavaScript:Date类型全面解析
May 19 #Javascript
javascript中对Date类型的常用操作小结
May 19 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
分享10段PHP常用代码
2015/11/11 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
Python实现的简单dns查询功能示例
2017/05/24 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
小学生操行评语
2014/04/22 职场文书
社会公德演讲稿
2014/05/20 职场文书
网络营销策划方案
2014/06/04 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
2014年人大工作总结
2014/12/10 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python