这是我的目标:
var myObj =
{
nestedObj: {
"My key has spaces": "You want my value"
}
}
我不知道我收到myObj的内容。我有一个字符串变量,表示我需要的值的键。看起来像这样:
var theKey = "nestedObj['My key has spaces']";
如何使用此字符串变量从对象获取值?
显而易见的猜测是行不通的:
myObj[theKey]; // returns undefined
编辑:我希望有一个比这个例子更灵活的解决方案。也就是说,我可能需要深入到另一个层次,点符号可能会被加入到混合中。我用的是有角度的。js,并认为一定有什么东西已经做到了这一点。
编辑:更新问题的改进答案:)
链接到JsFiddle
使用正则表达式:
var test1 = "nestedObj['My key has spaces']";
var test2 = "abc [\"def ghi\" ].jkl[123][ 'mn o']";
function getKeys(str) {
// Regular expressions for the first key in the str
var reg = [
/^\s*\[\s*(\d+)\s*\]/, // Case 1: [ someIntegerKey ]
/^\s*\[\s*\'([^\']+)\'\s*\]/, // Case 2: [ 'someKey' ]
/^\s*\[\s*\"([^\']+)\"\s*\]/, // Case 3: [ "someKey" ]
/^\s*\.\s*([^\[\.]+)/ // Case 4: . someKey
];
var keys = [];
var tail = "." + str;
var success = true;
while (success) {
var result =
tail.match(reg[0]) ||
tail.match(reg[1]) ||
tail.match(reg[2]) ||
tail.match(reg[3]);
if (result) {
keys.push(result[1]);
tail = tail.slice(result[0].length);
} else {
success = false;
}
}
return keys;
}
console.log(getKeys(test1));
console.log(getKeys(test2));
尝试以下内容:
eval('myObj.' + theKey);
['
作为分隔符拆分字符串var theKey = "nestedObj['My key has spaces']";
myObj[theKey.split("['")[0]][theKey.split("['")[1].replace("']","")];
演示:
var myObj =
{
nestedObj: {
"My key has spaces": "You want my value"
}
}
var theKey = "nestedObj['My key has spaces']";
var result = myObj[theKey.split("['")[0]][theKey.split("['")[1].replace("']","")];
alert(result);
问题内容: 我有以下json对象: 以下几行工作正常: 但是,如果键有空格,那么我将无法访问它们的值,例如 如何访问键名带有空格的值?可能吗 问题答案: 做到这一点的方法是通过括号表示。 有关更多信息,请在此处阅读: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Working_with_Objects
描述 (Description) 您可以通过使用“。”连接访问路径的属性名来访问bean的嵌套属性的值。 分隔符。 您可以使用以下方法获取和设置Nested属性的值: PropertyUtils.getNestedProperty(Object, String) PropertyUtils.setNestedProperty(Object, String, Object) 参数: Object :
问题内容: 团队,编程新手。如下图所示对Json进行编组后,我有可用数据,该数据具有嵌套的Key值。我可以访问的固定键值,如何访问嵌套键值。拆封后,这是下面显示的字节切片数据—> 我可以使用以下代码访问平面键值 这是完整的功能 问题答案: 注意:这可能不适用于您的JSON结构。我根据您的问题推断出它将是什么,但是如果没有实际的结构,我无法保证它可以在不做任何修改的情况下工作。 如果要在映射中访问它
问题内容: 因此,我可以使用进行访问,但如何访问? 问题答案: 您可以这样操作:
问题内容: 我有以下json对象: 以下几行工作正常: 但是,如果键有空格,那么我将无法访问它们的值,例如 如何访问键名带有空格的值?可能吗 问题答案: 做到这一点的方法是通过括号表示。