假设我有以下对象:
var jsonObj = {
"response":{
"result":{
"status":{
"name": "Eric"
}
}
}
}
现在我想动态访问嵌套属性:
jsonKey = "response.result.status.name";
console.log("the status is: " + jsonObj.jsonKey); //I cannot call jsonObj.jsonKey here
有什么办法可以实现这一点吗?
您无法像您期望的那样简单地访问深度嵌套的属性。相反,您需要使用
obj[propertyNameAsString]
语法来一一深入了解响应。
这是实现这一目标的一种方式:
let response = {
"response": {
"method": "GetStatus",
"module": "Module",
"data": null,
"result": {
"status": {
"name": "Eric"
},
"id": 1
},
"result_code": {
"error_code": 0
}
}
}
let keyString = "response.result.status.name"
let keyArray = keyString.split('.'); // [ "response", "result", "status", "name" ]
var result = response;
for (key of keyArray) {
result = result[key]
}
console.log(result)
请注意,对于
keyArray
中的这些字符串之一不作为前一个对象的属性存在的情况,这并不能保证故障安全。
您可以使用这样的代码:
something['bar']
在我们的例子中,bar 是已转换为字符串的变量:
jsonObj[`${jsonKey}`]