Ajax中解析Json的两种方法对比分析


Posted in Javascript onJune 25, 2015

eval();  //此方法不推荐

JSON.parse();  //推荐方法

一、两种方法的区别

我们先初始化一个json格式的对象:

var jsonDate = '{ "name":"周星驰","age":23 }'


var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法


var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

然后在控制台调用:

console.log( jsonObj.name );  // 两种方法都可以正确输入 周星驰

那么问题来了 两种方法有什么区别呢?(下面我们稍微把代码改动一下,蓝色字体为修改部分)

var jsonDate = '{ "name":alert("hello"),"age":23 }'


var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法


console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23

换“JSON.parse();”方法:

var jsonDate = '{ "name":alert("hello"),"age":23 }'


var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法


cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的

小结:“eval();”方法解析的时候不会去判断字符串是否合法,而且json对象中的js方法也会被执行,这是非常危险的;而“JSON.parse();”方法的优点就不用多说了,推荐此方法。(不明白的盆友可以自己在控制台测试一下)

二、扩展问题

var jsonDate = '{ "name":"周星驰","age":23 }'

大家可以看到在上面测试时一直用红色把包在花括号外面的引号标注了起来,这对引号是很关键却又是常常被忽略的,因为 “eval();” 和 “JSON.parser();” 这两个方法的参数只接受字符串,也就是说只能解析字符串!!

那我不经会有一个思考,我们在初始化的时候若不加引号对,那么它本身就是对象,js可以直接获取对象本身的属性和方法;为什么还要加引号将它变成字符串之后再用 “eval();” 或者 “JSON.parse();” 解析,这样做不是既不环保又没有效率吗?

原因很简单:前端提供给后台的只能是字符串数据格式,后台返回给前台的就看返回的是什么数据格式,是字符串就必须解析之后再用。

(这个小问题一般大家都会忽略掉,不太关注。我之所以好奇的原因也是因为对后台了解的不够,把这个问题抛出来希望对后台不熟的朋友有所帮助,知道是怎么回事后自然而然会加深记忆,在开发过程中就不会漏掉了)

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
jQuery 各种浏览器下获得日期区别
Dec 22 Javascript
JavaScript 开发中规范性的一点感想
Jun 23 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 Javascript
探讨jQuery的ajax使用场景(c#)
Dec 03 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
Javascript中浏览器窗口的基本操作总结
Aug 18 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
js尾调用优化的实现
May 23 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
Oct 18 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 #Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 #Javascript
深入理解JavaScript编程中的原型概念
Jun 25 #Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 #Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 #Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 #Javascript
深入分析JSON编码格式提交表单数据
Jun 25 #Javascript
You might like
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
php命令行模式代码实例详解
2021/02/26 PHP
网站上面有这种切换效果
2006/06/26 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python实现在windows下操作word的方法
2015/04/28 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
三星法国官方网站:Samsung法国
2019/10/31 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
自我评价的正确写法
2013/09/19 职场文书
成绩单公证书
2014/04/10 职场文书
村容村貌整治方案
2014/05/21 职场文书
历史学专业求职信
2014/06/19 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书