2012-11-13 28 views
0

我想制作一个接收json对象和路径的简单应用程序。其结果是,路径的值,例如:nodejs json动态属性

node {"asd":{"qwe":"123", "ert":"465"}} asd.qwe 

应该返回我:123

我使用这个:

var result = JSON.parse(jsonToBeParsed); 
console.log(result["asd"]["qwe"]); 

但我希望能够得到的值与字符串dinamically。 有没有办法做这样的事情? :

var result = JSON.parse(jsonToBeParsed); 
var path = "asd.qwe" //or whatever 
console.log(result[path]); 

回答

2
var current = result, 
    path = 'asd.qwe'; 

path.split('.').forEach(function(token) { 
    current = current && current[token]; 
}); 

console.log(current);// Would be undefined if path didn't match anything in "result" var 

编辑

current && ...目的是这样,如果current未定义(由于无效的路径)的脚本将不会尝试评估undefined["something"]这将抛出一个错误。但是,我刚刚意识到if current碰巧是虚假的(即false或零或空字符串),因此无法查找token中的属性。所以可能检查应该是current != null

ANOTHER编辑

这里有一个更好的,惯用的方式来做到这一点的一条线,使用Array.reduce() method

path.split('.').reduce(
    function(memo, token) { 
    return memo != null && memo[token]; 
    }, 
    resultJson 
); 

这也是更好,因为它不需要任何var小号

+0

它工作完美,谢谢! – Federico

+0

干杯。我增加了另一个解它好多了。 – meetamit