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 相关文章推荐
优秀js开源框架-jQuery使用手册(1)
Mar 10 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
Apr 01 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
jquery图片倾斜层叠切换特效代码分享
Aug 27 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
JS作用域链详解
Jun 26 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 Javascript
JS的Ajax与后端交互数据的实例
Aug 08 Javascript
vue实现一拉到底的滑动验证
Jul 25 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
php 购物车的例子
2009/05/04 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
javascript工具库代码
2012/03/29 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
python编写暴力破解FTP密码小工具
2014/11/19 Python
python中dir函数用法分析
2015/04/17 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python3中列表list合并的四种方法
2019/04/19 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
酒店总经理欢迎词
2014/01/15 职场文书
大学生创业项目方案
2014/03/08 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
CAD实训总结范文
2015/08/03 职场文书