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;
}