在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;
}
});
答案 0 :(得分:0)
您可以使用
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);