eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题
2016-03-02 00:00
609 查看
摘要: 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模式对象:
在网络上,前台获取数据的方式主要为: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所示 我们需要将json进行修改,如将单引号改为双引号: 。var result2={"name":"jack","age":"23","work":"IT"};然而还是会出错,错误信息如图:json3所示 最后将json再次修改为如下所示var result2='{"name":"jack","age":"23","work":"IT"}';终于解析成功。这里也就留给我们一个问题,到底用那种方式进行json解析最为靠谱,也就是可以适合所有的json数据解析。 这里如果还想采用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所示。 添加一对[]括号:var result2='{"name":"jack","age":"23","work":"IT"}'; function pjson(){ var str=eval("["+result2+"]"); alert(str.name); }出现无定义的声明:如图json6.png 很不情愿的添加一对小括号():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); }出现错误,如图:这个错误我很少见到,个人认为所说的无效字符是指我的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悬停效果,无法遮蔽FLASH的问题
- 再谈Jquery Ajax方法传递到action(补充)
- Dom在ajax技术中的作用说明
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- ajax中data传参的两种方式分析
- 原生AJAX写法实例分析
- 探秘ajax跨域请求
- JQuery ajax返回JSON时的处理方式 (三种方式)
- Ajax中浏览器和服务器交互详解
- ajax实现点击不同的链接让返回的内容显示在特定div里
- ajax 动态传递jsp等页面使用id辨识传递对象
- ajax与传统web开发的异同点
- AJAX简单应用实例-弹出层
- AJAX初级教程之初识AJAX
- Ajax无刷新分页的性能优化方法
- jquery对ajax的支持介绍
- jQuery基于ajax实现星星评论代码
- Ajax 说的比较清楚的一篇文章
- 基于iframe实现ajax跨域请求 获取网页中ajax数据