js中字符串数据转为json对象的方法

这个问题是在工作中碰到的,所以分享出来.公司使用的是jQuery作为前端开发框架.昨天在取后台传过来的数据时候,使用json格式取出的数据变成了字符串.

数据条数总共只有8条,然而使用alert(json.length)的时候,却弹出了2185条数据.所以遇到这样的情况,我们需要手动的把字符串转换为js对象,因为此时计算的长度是整个字符串的长度.

转换方法有3种:

  1. eval() 函数
  2. 使用 new Funtion()构造函数
  3. 使用浏览器内置JSON.parse方法(IE Version > IE8(S))

来说说使用的建议:

eval()函数,很强大的函数,会模拟出一个js解析器,能解析任何js代码,但是执行效率和安全性不是很好.所以在做Demo的时候可以使用,但是做项目的时候不推荐用它.

Function构造函数方法,这是Jquery中解析JSON数据的方法,查看他的源代码(580行)中即可看到,使用此方法,经人测试,速度确实比eval()快很多倍.

/**
 *jQuery源码,557-580行

 */
... ...

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );

    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( rvalidchars.test( data.replace( rvalidescape, "@" )
        .replace( rvalidtokens, "]" )
        .replace( rvalidbraces, "")) ) {

        return (new Function( "return " + data ))();

    }
    jQuery.error( "Invalid JSON: " + data );
}
... ...

JSON.parse()这是后来添加到浏览器内置解析JSON数据的方法,所以存在浏览器兼容性问题,但是因为是内置方法,肯定速度上是超快的,所以应该是最佳选择吧,至于解决浏览器兼容问题,可以针对IE6-IE8使用(Function())()方法解决,即可.

三种方法使用代码:

var json = '{"name":"liangqi","sex":"boy"}';

//eval()
jsonObj0 = eval('('+json+')');

//Function 创建一个闭包,返回一个json数据对象
jsonObj1 = (new Function('return'+json))();

//JSON.parse()
if(window.JOSN){
   jsonObj2 = JSON.parse(json);
}else{
   ... ... //针对比支持此方法的调用此处

}
posted @ 2012-07-12 13:51  令狐葱★  阅读(1308)  评论(0编辑  收藏  举报