通过字符串从JSON对象获取特定值

时间:2015-11-28 20:20:29

标签: javascript json

我试图通过字符串(键)访问hello值 我没有定义。我没想法让它发挥作用。

var key = "a.b.c.0";
var test = {"a":{"b":{"c":["hello","world"]}}};
console.log(test[key]); // undefined

console.log(test["a.b.c.0"]); // undefined
console.log(test["a.b.c[0]"]); // undefined
console.log(test["a.b.c"]); // fail
console.log(test.a.b.c); // [ 'hello', 'world' ]
console.log(test.a.b.c[0]); // hello

2 个答案:

答案 0 :(得分:3)

你可以做这样的事情,但不知道它会给你多远:

key.split('.').reduce(function(test, prop) {
  return test[prop];
}, test);

<强>实施例

'a.b.c.0'.split('.').reduce(function(test, prop) {...
// => "hello"

'a.b.c'.split('.').reduce(function(test, prop) {...
// => ["hello", "world"]

答案 1 :(得分:0)

如果您愿意使用图书馆,我强烈建议您查看lodash。为此,您可以使用lodash的get方法https://lodash.com/docs#get

_.get(test, key);

或者如果您需要Access object child properties using a dot notation string

中的基本本机JS实现
function getDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

console.log(getDescendantProp(test, key));
//-> hello

另一种可能的方式(我不推荐它但它应该工作)是使用eval()

var value = eval('test' + key)