2014-04-24 62 views
0

如果我有一個Javascript對象,從JSON解析,這是嵌套三深,我不知道中間的關鍵,如何訪問它和它的內容?Javascript:如果我不知道對象的關鍵字,我如何訪問嵌套對象中的值?

我正在使用的實際數據來自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

根據您發佈的樣品中,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並且僅返回這些對象上手動定義。

+0

這工作。謝謝! – Curiositry

0

如果你想在它們之間迭代,這樣做

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

在循環中使用'var'會給人錯誤的印象_JavaScript_具有塊級作用域。 –

+0

它的確如此,但如果你不知道這一點,將它們移到外面並不會真正幫助你理解。如果你知道,那麼你可以有意識地忽略在函數的開始處移動'var'聲明,因爲它會變得更糟。我看到克羅克福德來自哪裏,但我真的不知道它是如何幫助那些甚至不理解塊或功能範圍意味着什麼的人。 – TheShellfishMeme

+0

感謝您的及時答覆!不幸的是,我沒有足夠的代表來upvote你的帖子,我只能接受一個... – Curiositry