我一直在尝试将这样的 JSON 转换为 d3 可以使用的东西,但我遇到了一些麻烦。这是示例 JSON
[{
"name" : "MATH210",
"work" : {
"assessment1" : {
"mark" : 65,
"weight" : 40
},
"assessment2" : {
"mark" : 65,
"weight" : 60
}
},
"overallMark" : 95
},
{
"name" : "MATH215",
"work" : {
"assessment1" : {
"mark" : 67,
"weight" : 30
},
"assessment2" : {
"mark" : 65,
"weight" : 45
},
"exam" : {
"mark" : 72,
"weight" : 25
}
},
"overallMark" : 85
},
{
"name" : "MATH220",
"work" : {
"assessment1" : {
"mark" : 65,
"weight" : 50
},
"assessment2" : {
"mark" : 65,
"weight" : 50
}
},
"overallMark" : 75
}]
我对 d3 很陌生,但是我阅读和处理过的所有示例都有数组形式的数据,所以这就是我的第一个方法关注的内容。
我将发布一些代码,以便您更好地理解我所做的事情。所以我首先使用这样的代码创建一个包含来自 JSON 的模块对象的数组
var count = 0;
// loop through json and instantiate each
// module and store in the modules array
$.each(json, function(i, item) {
progress.modules[count] = new Module( i , item );
count++;
});
然后我使用大量嵌套的 for/in 循环来提取我想要的数据并将它们存储在每个模块的大量数组中,每个模块都有 3 个不同的数组。
// Arrays that will hold all the broken down data
this.workNames = [], this.marks = [], this.weights = [];
这种方法有效,但不适用于大量数据。
我要做的就是根据总分及其权重和散点图绘制一些饼图。从我在其他地方读到的关于堆栈溢出和网络上的内容,我感觉有一种更优雅的方式来获取这些数据并将其转换为 d3 可以使用的东西。
也许通过像这样使用 d3.nest()
有没有人知道如何在不使用上述方法的情况下将这个 JSON 转换为与 d3 一起工作?
提前致谢 :)