• 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{
       ... ... //针对比支持此方法的调用此处
    
    }
  • 相关阅读:
    1
    最大子串
    线段树
    mybatis分页插件
    springmvc下载文件
    获“领跑衫”感言
    finnal 评论 II
    用户使用报告
    事后诸葛亮会议 (尸体解剖)
    final阶段成员贡献分
  • 原文地址:https://www.cnblogs.com/jiji262/p/2587979.html
Copyright © 2020-2023  润新知