2012-11-03 45 views
1

我試圖用JSON文件中的數據創建帶d3的堆疊條形圖。每個酒吧都會有特定月份的關係,損失和勝利。如何使用從同一文件獲得的文字訪問JSON文件中的對象屬性

JSON文件:

{ 
    "name": "FHS", 
    "points": 3000, 
    "ties": 3, 
    "losses": 19, 
    "wins": 50, 
    "games": { 
     "2010-09": { "ties": 1, "losses": 2, "wins": 16 }, 
     "2010-10": { "ties": 2, "losses": 5, "wins": 13 }, 
     "2010-11": { "ties": 0, "losses": 12, "wins": 21 } 
    } 
} 

我已經使用了一些就好使用d3.json功能的數據。例如:

d3.json("data.json",function(error,data) 
    { 
     alert(data.name); 
     alert(data.points); 
     // etc. 
    }); 

但這裏是它有趣(僅供參考,我使用下劃線庫搶到的「遊戲」,每個屬性......也許這就是我要去哪裏錯了?)。如果我嘗試以下操作:

_.keys(data.games).forEach(function(d) 
    { 
     alert(d); 
    }); 

我在2010-09,2010-10,11 2010-11在三個不同的警報框中...完美!但是,如果我嘗試以下方法:

_.keys(data.games).forEach(function(d) 
    { 
     alert(d.ties); 
    }); 

我得到了一個未定義:/其實,我看到的另一個問題是,

alert(data.games.2010-09.ties); 

應該工作(如果屬性名稱不與開始整數或連字符...),但不會因爲字面格式(「2010-09」)...所以,我的主要問題是如何動態訪問嵌套的對象屬性的方式,將使生成一個簡單的圖表。我試圖包含足夠的上下文,但請讓我知道如果您想了解更多信息。提前致謝!

+0

考慮使用_.each,如果你想要的話,我認爲它會傳遞給你關鍵和值。 – Superboggly

+0

@Superboggly:謝謝,我必須檢查一個! – MuffinTheMan

回答

3

由於d在函數內部是一個字符串 - 「2010-09」,「2010-10」,「2010-11」等等,因此您在警告框中未定義,因爲您正在遍歷數組由_.keys(data.games)返回的字符串。

所以,alert(d.ties)就像是打電話alert("2010-09".ties),這是預料未定義的。

但是,建立在什麼拉斯解釋,

_.keys(data.games).forEach(function(d) 
{ 
    alert(data.games[d].ties); 
}); 

是你如何在數據獲得。

P.S. console.log(data.games[d].ties)是調試javascript的更健壯的方式(因此通常是首選方式)。

+0

感謝您的額外信息。在閱讀拉爾斯的回答後,我幾乎可以立即想到調用'data.games [d] .ties'。我必須記住用於調試的console.log()函數。 – MuffinTheMan

2

您可以將密鑰放入[""]以訪問該值,即alert(data.games["2010-09"].ties);將起作用。您可能也對d3函數感興趣,以使用鍵值結構;見the documentation

+1

感謝您的快速回復。我還沒有看看d3.keys,但在forEach循環中,我嘗試了'alert(data.games [d] .ties);',而且這似乎很好地工作。我只需要更多地玩一下。謝謝! – MuffinTheMan

相關問題