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

   这里给大家介绍的是Ajax中解析Json的两种方法对比分析,十分的实用,本文为学习笔记,属新手文章,欢迎指教!

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

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

  一、两种方法的区别

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

  ?

1
2
3
4
5

  var jsonDate = '{ "name":"周星驰","age":23 }'
 
  var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法
 
  var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

  然后在控制台调用:

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

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

  ?

1
2
3
4
5

  var jsonDate = '{ "name":alert("hello"),"age":23 }'
 
  var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法
 
  console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23

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

  ?

1
2
3
4
5

  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();” 解析,这样做不是既不环保又没有效率吗?

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

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

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

时间: 2024-08-22 14:15:18

Ajax中解析Json的两种方法对比分析的相关文章

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

eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方

jQuery的 $.ajax防止重复提交的两种方法(推荐)_jquery

下面给大家带来两种关于jquery 的ajax防止重复提交的解决方法,具体介绍如下所示: 1.第一种,对于onclick事件触发的的ajax 可以采用如下方法: 即在beforeSend中使点击按钮不可用,ajax结果返回后置为可用 $.ajax( { type: 'POST', url: APP+'?m=Shopping&a=ajaxSubmitorder&sid='+sid+'&src='+src, cache:false, dataType: 'json', data: {'

Ajax解决多余刷新的两种方法(总结)

控制器Servlet则提供了简单的改变: 对于Ajax系统而言,服务器响应无须是整个页面内容,可以仅是 必需的数据,控制器不能将数据请求转发到jsp页面. 此时控制器有两个选择: 1.直接生成简单的响应数据. 在这种模式下,Servlet直接通过response获取页面输出流,通过 输出流生成字符响应. package pers.zkr.chat.web; import java.io.IOException; import java.io.PrintWriter; import javax.s

ZBrush中绘制纹理的两种方法

  利用ZBrush的内置插件"投影大师"和"Polypainting"纹理贴图能够快速实现纹理的绘制.本文将对这两种方法的应用流程做一个介绍. 在ZBrush中绘制纹理的两种方法: Projection Master(投影大师):这是基于投影的基本纹理系统.用户将他们的模型"投下"到画布接着绘制,最后从画布拾取. Projection Master(投影大师)的概念是比较简单的.当开始3D模型工作时,你激活Projection Master,这

Excel单元格中数据自动换行的两种方法

Excel单元格中数据自动换行的两种方法   不管单元格中是已经有了数据,或者还等待输入数据,都可以对它执行自动换行命令.自动换行的方法有两种,现在就来对下面表格中已经超出单元格宽度的数据使用自动换行. Excel单元格中数据自动换行的方法一 选择要换行的单元格(可以是一个,也可以是多个),然后切换到"开始"选项卡,单击"对齐方式"组中的"自动换行"命令. Excel单元格中数据自动换行的方法二 1.选中要换行的单元格,单击鼠标右键,在弹出的菜单

在PowerPoint中插入视频的两种方法

     为追求更完美效果,在Powerpoint中通过shockwave Flash Object控件插入SWF格式动画已是家常便饭.但很多情况下,演示文档还需要视频做辅助,下面我们介绍在PowerPoint 2007中插入视频的两种方法.   直接插入法        这是最简单方法.用该法插入的视频,在演示界面中仅显示视频画面,和插入图片十分类似.可以说,这是一种无缝插入,效果相当不错,但同时局限性也很大.首 先,该法仅支持插入AVI.MPEG和WMV等Windows Media格式视频,

WPS2013文字中拆分窗口的两种方法

  WPS2013文字中拆分窗口的两种方法          在WPS2013中存在两种方法可以对窗口进行分屏操作,下面就详细的介绍一下如何操作. 1.第一种方法:通过在同一个窗口中新建窗口来实现的,首先点击"视图"下的"新建窗口",然后点击"重排窗口",在下拉选项中包括水平平铺.垂直平铺和层叠三种格式,可以根据自己的需要进行选择. 2.第二种方法:在最新版本的WPS2013文字中,在"视图"菜单下直接由"拆分窗口&

PHP删除数组中特定元素的两种方法

这篇文章介绍了PHP中删除数组中特定元素的两种方法,有需要的朋友可以参考一下   方法一: 复制代码 代码如下: <?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false)     array_splice($arr1, $key, 1); var_dump($arr1); ?> 输出: array(4) { [0]=> int(1) [1]=> int(5) [2]=>

js删除Array数组中指定元素的两种方法_javascript技巧

本节内容: js删除Array数组中指定元素 方法一, /* * 方法:Array.remove(dx) 通过遍历,重构数组 * 功能:删除数组元素. * 参数:dx删除元素的下标. */ Array.prototype.remove=function(dx) { if(isNaN(dx)||dx>this.length){return false;} for(var i=0,n=0;i<this.length;i++) { if(this[i]!=this[dx]) { this[n++]=