Javascript:如果我不知道对象的密钥,如何访问嵌套对象中的值?

时间:2014-04-24 17:41:15

标签: javascript json object github github-api

如果我有一个Javascript对象,从JSON解析,它嵌套了三个深,我不知道中间的密钥,如何访问它及其内容?

我正在使用的实际数据来自Github API。对于这个例子,我想要所有我的要点的文件名。

[
  {
    "url": "https://api.github.com/gists/11164200",
    "forks_url": "https://api.github.com/gists/11164200/forks",
    "commits_url": "https://api.github.com/gists/11164200/commits",
    "id": "11164200",
    "git_pull_url": "https://gist.github.com/11164200.git",
    "git_push_url": "https://gist.github.com/11164200.git",
    "html_url": "https://gist.github.com/11164200",
    "files": {
      "testing.md": {
        "filename": "testing.md",
        "type": "text/plain",
        "language": "Markdown",
        "raw_url": "https://gist.githubusercontent.com/omphalosskeptic/11164200/raw/3582779a4925ea514382cedb7d077d00c231f3eb/testing.md",
        "size": 4254
      }
    }, // [ ... continues]

我的Javascript技能很简陋。通常情况下,我可以通过足够的研究找到我正在寻找的东西但不是这次。最初我预计它会像:responseObj[0].files[0].filename

如果可能的话,我想保留这个简单的Javascript。

谢谢!

2 个答案:

答案 0 :(得分:2)

根据您发布的示例,files属性不是数组,因此索引器无法访问。在这种情况下,您可以使用for-in循环而非常规for循环。

for(var p in responseObj[0].files) {                 
  if ( responseObj[0].files.hasOwnProperty (p) ) {   
    p; // p is your unknown property name
    responseObj[0].files[p]; // is the object which you can use to access 
                             // its own properties (filename, type, etc)           
  }                                                                                                           
}

hasOwnProperty检查将跳过toString之类的自动成员,并仅返回在对象上手动定义的成员。

答案 1 :(得分:0)

如果要迭代它们,请执行类似

的操作
for (var fileID in responseObj[0].files) {
    var file = responseObj[0].files[fileID];
    var filename = file.filename;
}