eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题

在网络上,前台获取数据的方式主要为:xml,json,xml,jsonp,txt,其中最多的方式为json,服务器将json返回前台,前端工程师用javascript进行解析获取重要数据,
json传送数据,内容占空间较小,但是可读性较差。
最简单的json表达式为{'name':'jack'}跟java中的map类似,分为key,value.由于现在做的一个项目涉及到json的解析,这里我简单学习了一下json.
json的两种解析方式,一个是javascript自带api中的函数eval(),一个是jquery.parseJSON(),那么这两个方法有什么不同呢。
现在我们自定义一个简单的json模式对象:

var result1={'name':'jack','age':'23','work':'IT'};

自定义一个简单的方法,方法名自定义:

function pjson(){  var str=eval(result1);  alert(str.name);  }

跟预想的一样,弹出一个框,内容显示为jack.由于给予的json比较规范,所以通过以下方式也可以直接获取数据,

function pjson1(){  alert(result1.name);}

返回值仍为jack.
关于jQuery.parseJson对json的解析方式,如果这里采用result1那么会报错,使得json无法被解析,如图json2所示

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题_第1张图片

我们需要将json进行修改,如将单引号改为双引号:

 。

var result2={"name":"jack","age":"23","work":"IT"};

然而还是会出错,错误信息如图:json3所示

 最后将json再次修改为如下所示

var result2='{"name":"jack","age":"23","work":"IT"}';

终于解析成功。这里也就留给我们一个问题,到底用那种方式进行json解析最为靠谱,也就是可以适合所有的json数据解析。

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题_第2张图片

  这里如果还想采用pjson1方式获取数据已经不可能,因为整个result2已经被当作一个字符串。  那么我们如果用pjson()方式又是什么效果呢?试一下吧!

var result2='{"name":"jack","age":"23","work":"IT"}';  function pjson(){  var str=eval(result2);  alert(str.name);  }

 其所报的错误为缺少分号:

这个结果让我很诧异。

 在这里我依稀记得需要在eval()方法中加入括号,但是是什么括号忘记了。这里试一下,没办法,总的理解事情的真相:  先添加一对大括号{}:

var result2='{"name":"jack","age":"23","work":"IT"}';  function pjson(){  var str=eval("{"+result2+"}");  alert(str.name);  }

出现异常,如图json5.png所示。

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题_第3张图片

  添加一对[]括号:

 var result2='{"name":"jack","age":"23","work":"IT"}';  function pjson(){  var str=eval("["+result2+"]");  alert(str.name);  }

 出现无定义的声明:如图json6.png

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题_第4张图片

 很不情愿的添加一对小括号():

 var result1={'name':'jack','age':'23','work':'IT'};  var result2='{"name":"jack","age":"23","work":"IT"}';  function pjson(){  var str=eval("("+result2+")");  alert(str.name);  }

居然成功了,返回结果与需要的结果完全一致。
当我们为自己的成功感到自豪时一个问题又出现了,能不能用pjson解析result1中的数据呢。
答案居然是否定的,我们做了这么多无非就是希望能够找到一个能够解析所有json的一种方式,而此时抛出的异常居然是缺少‘]’。

 那我们该如何解决呢,肯定是有办法的,最后我认为给予result赋值时获取的事一个对象,该类型不是字符串,毕竟在json1方法中能够调用就证明了这点,result1的定义方式 倒有点类似枚举之类的。 最后我将result改为这样

var result1="{'name':'jack','age':'23','work':'IT'}";  function pjson2(){  var str=jQuery.parseJSON(result1);  alert(str.name);  }

出现错误,如图:
eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题_第5张图片
  这个错误我很少见到,个人认为所说的无效字符是指我的json格式不能被解析吧,可能jQuery.parseJSON()不能解析带单引号的json数据,
 查看了一下API貌似也是这样说的,(英语水平有限,大意纯属猜测)。
 仿照eval()的方式添加各种括号都没有成功,也从侧面证明着我的猜测。当服务器返回数据时我们很难把握它的格式,但是只要说json我们应该采用eval()方法去处理,
 当然这里只是我根据小量信息做出的结论。
 其实我们从服务器获取的数据保装一般如:{'name':'jack','age':'23','work':'IT'}但是跟上面我们自定义的result1不一样,
 由于其本身为字符串形式,所以我们采用的方法不会出错,而result1输出返回的是一个object对象。只有给其添加“”号成为字符串才能被解析。
 以下两种方式也都能成功:

var result1="{name:'jack',age:'23',work:'IT'}";  var result2='{name:"jack",age:"23",work:"IT"}';  function pjson(){  str=eval("("+result2+")");  alert(str.name);  }

其实现在有点迷惑,jquery.parseJSON()功能应该不会比eval()差,为什么在这里却出现上述问题呢?也许对jQuery.parseJSON而言,result1不符合标准。
 将result1放到json解析器中查看爆出:json9.png这样的异常。
 查阅很多资料上面的json格式key和value对象或字符串都是采用双引号"",也就是说var result2='{"name":"jack","age":"23","work":"IT"}';
 才是标准的json.
 这里必须说明一下,个人还是推荐使用eval("("+data+")"),从我的从业生涯中遇到的json里面的数据都是单引号,也就是说jQuery.parseJSON根本无法解析。
 最后祝各位工作顺利。

你可能感兴趣的:(Ajax)