簡體   English   中英

如何從字符串形式的對象文字創建對象?

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM