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 相关文章推荐
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
Sep 26 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
JS实现往下不断流动网页背景的方法
Feb 27 Javascript
jquery动态导航插件dynamicNav用法实例分析
Sep 06 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
jquery实现界面无刷新加载登陆注册
Jul 30 Javascript
JavaScript类的写法
Sep 17 Javascript
js实现带简单弹性运动的导航条
Feb 22 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
Nov 30 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
详解Python当中的字符串和编码
2015/04/25 Python
Python中 map()函数的用法详解
2018/07/10 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python命令 -u参数用法解析
2019/10/24 Python
pandas的resample重采样的使用
2020/04/24 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
台湾良兴购物网:EcLife
2019/12/01 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
营销团队口号
2014/06/06 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
保护地球的宣传语
2015/07/13 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
canvas实现贪食蛇的实践
2022/02/15 Javascript