在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;
}
});
你可以標記爲重複的,如果你認爲JSON作爲唯一的答案。是嗎?也許轉換爲JSON,以便它可以被解析... – Gustavo 2014-11-14 17:36:46
您提交的代碼將不適用於其中含有','的字符串文字。 ;) – 2014-11-23 03:24:52