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 相关文章推荐
最新28个很棒的jQuery 教程
May 28 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
Nov 21 Javascript
Javascript实现禁止输入中文或英文的例子
Dec 09 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
Feb 02 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
JS烟花背景效果实现方法
Mar 03 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
详解Node.js access_token的获取、存储及更新
Jun 20 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 Javascript
Vue中使用clipboard实现复制功能
Sep 05 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
利用PHP实现短域名互转
2013/07/05 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python基础教程之五种数据类型详解
2017/01/12 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python 一句话生成字母表的方法
2019/01/02 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
python实现扫雷游戏的示例
2020/10/20 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
用Python制作音乐海报
2021/01/26 Python
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
清扬洗发水广告词
2014/03/14 职场文书
教师师德考核自我评价
2014/09/13 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
内乡县衙导游词
2015/02/05 职场文书
销售内勤岗位职责
2015/02/10 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
Golang map映射的用法
2022/04/22 Golang