如何从字符串形式的对象字面值创建对象?
问题描述:
在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);
你可以标记为重复的,如果你认为JSON作为唯一的答案。是吗?也许转换为JSON,以便它可以被解析... – Gustavo 2014-11-14 17:36:46
您提交的代码将不适用于其中含有','的字符串文字。 ;) – 2014-11-23 03:24:52