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不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
JQuery实现表格中相同单元格合并示例代码
Jun 26 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
Dojo获取下拉框的文本和值实例代码
May 27 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
vue增删改查的简单操作
Jul 15 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 Javascript
在vue中获取wangeditor的html和text的操作
Oct 23 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 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
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
php适配器模式简单应用示例
2019/10/23 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python读取Kafka实例
2019/12/23 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
python实现对变位词的判断方法
2020/04/05 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
伊琍体标语
2014/06/25 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
Python包argparse模块常用方法
2021/06/04 Python
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS