json和js对象转换

来源:互联网 发布:修改tomcat的端口号 编辑:程序博客网 时间:2024/04/27 19:43

JSON是一种便于操作使用的轻量级数据交换格式。易于人阅读和编写。同时也

易于机器解析和生成。

很多时候我们需要将JSON格式的字符串转化为JSON对象或者将JSON对象转为JSON字符串。特别是在AJAX应用中经常需要将JSON格式的字符串返回到前端,前端解析成js对象(JSON )。

现将工作中接触到的一些方法总结如下:。

一.   将JSON字符串转化为JSON对象

  1. eval方式解析。各个版本的浏览器都支持,也是以前最早使用的方式了,而且性能也不错。使用方法为:eval('('+sJSON+')') ;注意:在字符串两端再加上括号,否则会出错。有时从数据库读出来的数据带有空格,使 eval 失效。这时只要将字符串中的空格去掉即可result.replace(/\s/ig, ' '); 
  2. new Function方式。各个版本的浏览器也都支持,看起来比较怪异。使用方法为:var json = (new Function("return " + sJSON))();
  3. 浏览器内置的JSON对象提供的方法。性能非常不错,不过只有IE8/Firefox3.5+/Chrome4/Safari4/Opera10 及以后版本内置了该方法。用法为:JSON.parse(str); ie8(兼容模式),ie7和ie6虽然没有此内置的JSON对象,不过你可以从https://github.com/douglascrockford/JSON-js上获取json2.js文件使得ie6,ie7可以使用JSON对象中的parse()方法。注意:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,否则为报错,前两种方式则没有此问题。
  4. JQuery中的parseJSON方法。jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式(属性加上双引号“”)的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。注意在JQuery中有些ajax的函数已经将服务器传过来的数据转化为了JSON对象了,比如$.getJSON("http://www.xxxxx/",{param:"xxx"},function(data){
    //此处返回的data已经是json对象 });$.ajax()中dataType如果指定为json的话则也已经转化为JSON对象了。

在性能方面的比较可以看http://weblogs.asp.net/yuanjian/archive/2009/03/22/json-performance-comparison-of-eval-new-function-and-json.aspx。

结论是:

在IE6,7中选择使用eval(choose eval in IE6, 7)。

在IE8中选择使用内置的JSON对象(choose native JSON in IE8)。 

在火狐2,3中使用new  Function(choose new Function in Firefox2, 3).

在Safari4中选择使用eval(choose eval in Safari4)。

使用其他的浏览器则eval和new Function两者性能差不多。

         简而言之:能用内置的JSON对象则使用JSON对象,否则的话只在火狐中使用new Function,其他都使用eval即可。

二.   将JSON对象转化为JSON字符串

  1. 浏览器内置的JSON对象提供的方法。同理只有IE8/Firefox3.5+/Chrome4/Safari4/Opera10 及以后版本内置了该方法。用法为:JSON. stringify (json); ie8(兼容模式),ie7和ie6虽然没有此内置的JSON对象,不过你可以从https://github.com/douglascrockford/JSON-js上获取json2.js文件使得ie6,ie7可以使用JSON对象中的stringify()方法。