如何从字符串形式的对象文字创建对象
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);
相关文章:
- 如何计算对象文字中的键
- 对象文字方法上的Javascript绑定不起作用
- 可以使用“;创建“;作为JavaScript对象文字中的属性名称
- 这两种不同的创建对象文字的方法有什么区别
- Javascript对象文字,POST问题
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何使用'这个“;对象文字中的关键字
- JS对象文字中的方法和子方法
- 向JavaScript对象文字添加数据
- Javascript对象文字,如何使用“this”来引用对象中的变量
- 如何将xml文件转换为javascript中的对象文字
- 什么's对象文字中带引号和不带引号的键之间的区别
- 使用窗口对象练习我的对象文字函数
- 对象文字数据表中的 Google 可视化样式角色
- 如何创建作用域的动态、基于实例的对象文字
- Javascript将字符串中的对象转换为对象文字
- 我需要一些帮助来理解JavaScript中的对象文字函数
- 为什么动画设置加载在TweenMax中的两个单独的对象文字中
- 对象文字语法怪异
- 对象文字中的类