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 相关文章推荐
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 Javascript
document.forms用法示例介绍
Jun 26 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
Jan 04 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
Jan 08 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
jQuery实现鼠标滑动切换图片
May 27 jQuery
JavaScript逻辑运算符相关总结
Sep 04 Javascript
vue a标签点击实现赋值方式
Sep 07 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
Python面向对象封装操作案例详解
2019/12/31 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
志愿者活动总结范文
2014/04/26 职场文书
廉洁教育学习材料
2014/05/19 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
财务整改报告范文
2014/11/05 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
python析构函数用法及注意事项
2021/06/22 Python