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 相关文章推荐
javascript一些不错的函数脚本代码
Sep 10 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
在JS方法中返回多个值的方法汇总
May 20 Javascript
JavaScript中的原型继承基础学习教程
May 06 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
深入理解React高阶组件
Sep 28 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 Javascript
在vue中使用回调函数,this调用无效的解决
Aug 11 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 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.MVC的模板标签系统(三)
2006/09/05 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
php跨域调用json的例子
2013/11/13 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
python多线程抽象编程模型详解
2019/03/20 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
python删除某个目录文件夹的方法
2020/05/26 Python
详解python中的异常捕获
2020/12/15 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
杠杆的科学教学反思
2014/01/10 职场文书
商业活动邀请函
2014/02/04 职场文书
旷课检讨书1000字
2014/02/14 职场文书
网络信息安全承诺书
2014/03/26 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书