[英]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.