Javascript 将字符串转换为嵌套JSON对象
我想知道,如果没有评估,这是可能的(我听说这是邪恶的) 并将其转换为Javascript 将字符串转换为嵌套JSON对象,javascript,Javascript,我想知道,如果没有评估,这是可能的(我听说这是邪恶的) 并将其转换为 var obj = { myObject: { property: { subproperty: {} } } }; 我已经做了两个小时了 我不喜欢的val解决方案: 我可以用输入字符串来做 var myString = 'myObject.property.subproperty'; var nameTree = myString.split('.')
var obj = {
myObject: {
property: {
subproperty: {}
}
}
};
我已经做了两个小时了
我不喜欢的val解决方案:
我可以用输入字符串来做
var myString = 'myObject.property.subproperty';
var nameTree = myString.split('.');
var evalString = '';
var myObj = {};
_.forEach(nameTree, function(value, key){
if (key == 0) {
evalString += 'myObj[' + value + '] = {};';
} else {
evalString += '[' + value + '] = {};';
}
});
eval(evalString);
我得到:
console.log(myObj);
// {myObject: {property:{subproperty:{}}}};
可以用来解决问题的功能是使用字符串索引进行动态属性访问
obj[“foo”]
与obj.foo
相同
var properties = myString.split('.');
var obj = {};
var curr = obj;
for(var i=0; i<properties.length; i++){
var next = {}
curr[properties[i]] = next;
curr = next;
}
var-properties=myString.split('.');
var obj={};
var curr=obj;
对于(var i=0;i基本上,给定该输入,您必须自己做。您可以使用一个以递归方式使用split的自制函数。我不确定eval()是什么
与你的问题有关,因为你甚至不能用它从输入字符串中得到你想要的东西。无论如何,这里有一个工作演示:使用hugomg展示的相同技术(谁碰巧比我打字更快,所以更快地发布了答案)。我的版本被放入一个函数中。@jfriend00编辑了一个问题来显示我提到的eval解决方案。但它是邪恶的。我在它下蛋之前就把它烧掉了。好吧,是的。这比不使用eval()
还要复杂。这会给我一个平面对象。或者你按enter键太快了?
var properties = myString.split('.');
var obj = {};
var curr = obj;
for(var i=0; i<properties.length; i++){
var next = {}
curr[properties[i]] = next;
curr = next;
}