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 相关文章推荐
关于Aptana Studio生成自动备份文件的解决办法
Dec 23 Javascript
23个Javascript弹出窗口特效整理
Feb 25 Javascript
jQuery之按钮组件的深入解析
Jun 19 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
vue.js开发环境搭建教程
May 04 Javascript
layer弹窗插件操作方法详解
May 19 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
微信小程序利用for循环解决内容变更问题
Mar 05 Javascript
解决Vue项目中tff报错的问题
Oct 21 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
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
学习python (2)
2006/10/31 Python
python中threading超线程用法实例分析
2015/05/16 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
init进程的作用
2012/04/12 面试题
项目副经理岗位职责
2013/12/30 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
推广普通话演讲稿
2014/05/23 职场文书
委托书的写法
2014/08/30 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
个人工作表现自我评价
2015/03/06 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
python中validators库的使用方法详解
2022/09/23 Python