用AJAX调用某HTTP接口,返回值为一个这样的字符串:[[0,1,3],[2,5,1],[1,3,2]]我知道var a = [[0,1,3],[2,5,1],[1,3,2]];得到的是一个二维数组
但上面返回的是一个字符串,如果var a = returnString;那么a也是一个字符串,如何把a转换为一个数组?我用split切割后再赋值给new Array是可以实现的,但是这感觉也太山寨了,有直接的方法吗?

解决方案 »

  1.   

    str="[[0,1,3],[2,5,1],[1,3,2]]"
    var a=eval(str);
      

  2.   

    json的起源就在于....
    可以直接 var json = eval(str);不过这个有安全隐患,可以动态执行str里的js,如果是自己的程序就无所谓了。要安全点的话可以先校验一下,清除里面的可执行代码。最新的浏览器已经带有json解析和拼装功能了。
    /*
    ---name: JSONdescription: JSON encoder and decoder.Copy from mootools 1.4.5license: MIT-style license.SeeAlso: <http://www.json.org/>requires: [Array, String, Number, Function]provides: JSON...
    */if (typeof JSON == 'undefined') this.JSON = {};var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};var escape = function(chr){
    return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4);
    };JSON.validate = function(string){
    string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
    replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
    replace(/(?:^|:|,)(?:\s*\[)+/g, ''); return (/^[\],:{}\s]*$/).test(string);
    };JSON.encode = JSON.stringify ? function(obj){
    return JSON.stringify(obj);
    } : function(obj){
    if (obj && obj.toJSON) obj = obj.toJSON(); switch (typeOf(obj)){
    case 'string':
    return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"';
    case 'array':
    return '[' + obj.map(JSON.encode).clean() + ']';
    case 'object': case 'hash':
    var string = [];
    Object.each(obj, function(value, key){
    var json = JSON.encode(value);
    if (json) string.push(JSON.encode(key) + ':' + json);
    });
    return '{' + string + '}';
    case 'number': case 'boolean': return '' + obj;
    case 'null': return 'null';
    } return null;
    };JSON.decode = function(string, secure){
    if (!string || NWJ.type(string) != 'string') return null; if (secure || JSON.secure){
    if (JSON.parse) return JSON.parse(string);
    if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.');
    } return eval('(' + string + ')');
    };