Javascript 使用变量作为键来获取嵌套对象值

问题描述 投票:0回答:2

假设我有以下对象:

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

有什么办法可以实现这一点吗?

javascript json ajax
2个回答
4
投票

您无法像您期望的那样简单地访问深度嵌套的属性。相反,您需要使用

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
中的这些字符串之一不作为前一个对象的属性存在的情况,这并不能保证故障安全。


0
投票

您可以使用这样的代码:

something['bar'] 

在我们的例子中,bar 是已转换为字符串的变量:

jsonObj[`${jsonKey}`]
© www.soinside.com 2019 - 2024. All rights reserved.