如何以字符串形式从对象文字创建对象?

时间:2014-11-14 17:20:21

标签: javascript parsing

在JavaScript中,我可以创建一个这样的对象:

var Obj = {someName:"My Name",someNumber:43};

我正在尝试做这样的事情(JSFiddle):

var str = '{someName:"My Name",someNumber:43}';
var Obj = new Object(str);
document.getElementById("result").innerHTML = 'Name: '+Obj.someName;

但结果将是"Name: undefined"。它不是读取符号,而是为字符串的每个字符串创建一个带有枚举对象的对象。为什么?有没有办法通过字符串中的描述创建对象?

我不想使用JSON格式,因为JSON要求对每个属性名称使用双引号,这样经常打字非常痛苦,不适合查看并导致更大的字符串。如果可能,我希望使用JavaScript对象文字表示法。

编辑2:这就是我将要做的事情(有更多时间)。它适用于一个级别的对象,我会考虑如何使它以递归方式工作以转换多维对象或数组。这个问题已经结束了......祝你好运!

Object.defineProperty(String.prototype, "isObject", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function(){
        var string = this;
        if(string.length<=1) return false;
        return (string.charAt(0)=="{" && string.charAt(string.length-1)=="}");
    }
});
Object.defineProperty(String.prototype, "isArray", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function(){
        var string = this;
        if(string.length<=1) return false;
        return (string.charAt(0)=="[" && string.charAt(string.length-1)=="]");
    }
});
Object.defineProperty(String.prototype, "toObject", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function(){
        var string = this;
        if(!string.isObject() && !string.isArray()) return false;
        var object = string.isObject();
        string = string.slice(1,-1);
        var Obj = (object)? new Object() : new Array() ;
        var Termos = string.split(",");
        var i, Elems, n=0, val;
        for(i in Termos){
            Elems = Termos[i].split(":");
            if(Elems.length==1) {
                val = Elems[0];
                if(object){
                    Obj[n] = val;
                } else {
                    Obj.push(val);
                }
                n++;
            } else {
                if(Elems[1].isObject() || Elems[1].isArray()){
                    val = Elems[1].toObject();
                } else if(typeof(Elems[1])=="number") {
                    val = Elems[1];
                } else {
                    Elems[1] = Elems[1].replace(/['"]+/g, '');
                    val = Elems[1];
                }
                if(object){
                    Obj[Elems[0]] = val;
                } else {
                    Obj.push(val);
                }
            }
        }
        return Obj;
    }
});

1 个答案:

答案 0 :(得分:0)

您可以使用

var str = '{someName:"My Name",someNumber:43}';

var strToParse = str.replace("{","").replace("}","").split(",");
for(var i = 0;i < strToParse.length;i++){strToParse[i] = '\"'+strToParse[i].split(":")[0]+'\":'+strToParse[i].split(":")[1];}

strToParse="{"+strToParse+"}";
var Obj = JSON.parse(strToParse);