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中confirm,alert,prompt函数区别分析
Jan 17 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
Jan 24 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
Jan 27 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
图解javascript作用域链
May 27 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
详谈js模块化规范
2017/07/07 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
Python实现多线程下载文件的代码实例
2014/06/01 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python对象的属性访问过程详解
2020/03/05 Python
python openssl模块安装及用法
2020/12/06 Python
介绍一下MD5加密算法
2016/11/12 面试题
材料物理专业大学毕业生求职信
2013/10/15 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
园艺师求职信
2014/03/10 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
归元寺导游词
2015/02/06 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
golang的文件创建及读写操作
2022/04/14 Golang