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 相关文章推荐
js 获取(接收)地址栏参数值的方法
Apr 01 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
jQuery自带的一些常用方法总结
Sep 03 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
Mar 09 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
JavaScript中的继承之类继承
May 01 Javascript
angular实现商品筛选功能
Feb 01 Javascript
js实现下拉菜单效果
Mar 01 Javascript
switchery按钮的使用方法
Dec 18 Javascript
微信小程序左滑删除实现代码实例
Sep 16 Javascript
微信小程序中data-key属性之数据传输(经验总结)
Aug 22 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
js数组去重的方法总结
2019/01/18 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
学习雷锋倡议书
2014/04/15 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
项目负责人任命书
2014/06/04 职场文书
森林防火标语
2014/06/23 职场文书
安全例会汇报材料
2014/08/23 职场文书
党员评议思想汇报
2014/10/08 职场文书
民主生活会主持词
2015/07/01 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL