我正在尝试根据 JSON 文件中的数据使用 d3 创建堆积条形图。每个柱状图都会有特定月份的平局、损失和胜利。
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、2010-11...完美!但是,如果我尝试以下操作:
_.keys(data.games).forEach(function(d)
{
alert(d.ties);
});
我得到 undefined :/事实上,我看到出现的另一个问题是
alert(data.games.2010-09.ties);
应该有效(如果属性名称不是以整数开头或没有连字符...),但不会因为文字格式(“2010-09”)...所以,我的主要问题是如何以一种使生成图表变得简单的方式动态访问嵌套对象属性。我已尝试包含足够的上下文,但如果您需要更多信息,请告诉我。提前致谢!
最佳答案
你在警告框中得到 undefined 因为 d
在这个函数中是一个字符串——“2010-09”、“2010-10”、“2010-11”等——因为你正在迭代 _.keys(data.games)
返回的字符串数组。
所以,alert(d.ties)
就像调用 alert("2010-09".ties)
,这应该是未定义的。
但是,根据 Lars 的解释,
_.keys(data.games).forEach(function(d)
{
alert(data.games[d].ties);
});
是您获取数据的方式。
附言console.log(data.games[d].ties)
是调试 javascript 的更可靠的方式(因此通常是首选方式)。
关于javascript - 如何使用从同一文件获取的文字访问 JSON 文件中的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211705/