鉴于这种结构:
{
"foo":{
"bar":{
"baz":[
{
"foo bar":"baz",
"baz foo":"bar"
}
]
}
}
}
如何从变量中选择'foo bar',例如:
var myString = "baz[0]['baz foo']";
有许多使用点表示法的例子:
Accessing nested JavaScript objects with string key
Access / process (nested) objects, arrays or JSON
Reference Nested JavaScript Object
但似乎没有人支持带空格的键。
答案 0 :(得分:3)
baz是一个对象数组
var obj = {
"foo":{
"bar":{
"baz":[
{
"foo bar":"baz",
"baz foo":"bar"
}
]
}
}
};
var myString = obj.foo.bar.baz[0]['baz foo'];
alert(myString);

<强>更新强>
您可以使用.eval()
方法。
var obj = {
"foo":{
"bar":{
"baz":[
{
"foo bar":"baz",
"baz foo":"bar"
}
]
}
}
};
var myString = "obj.foo.bar.baz[0]['baz foo']";
alert(eval(myString));
&#13;
答案 1 :(得分:1)
问题在于解析属性的路径,因为使用split会忽略[]和&#34;&#34;。此正则表达式prop.match(/[^.\[\]'"]+/g)
提取所有道具(fiddle):
function getProperty(obj, prop) {
var parts = prop.match(/[^.\[\]'"]+/g),
i = 0,
current = parts[0];
var currentValue = obj;
while (currentValue[current]) {
currentValue = currentValue[current];
current = parts[++i];
}
if(i < parts.length) {
return undefined;
}
return currentValue;
}
我确信我没有得到所有边缘案例和错误,但这是一个很好的起点。您还应该检查lodash _.get,它就是这样做的。