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

How do I create an object from an object literal in string form?

本文关键字:对象 文字 创建对象 字符串      更新时间:2023-09-26

在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;
    }
});
您可以使用

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);