【发布时间】:2016-02-18 19:24:05
【问题描述】:
我有一个 JSON 数据集
[{"key":"Albania",
"values":[{
"Country_Names":"Albania",
"Total":"3.8",
"Change_total":"-38.7",
"Main activity electricity and heat production":"0.1",
"Main activity electricity plants":"","Main activity CHP plants":"",
"Unallocated autoproducers / Other energy industry own use":"0.1",
"Other":"1.4",
"Manufacturing industries and construction":"1",
"Iron and steel":"0","Chemical and petrochemical":"0","Machinery":"",
"Mining and quarrying":"",
"Food and tobacco":"0.1",
"Paper, pulp and printing":"",
"Construction":"0",
"Transport":"2.2",
"Road":"2.2",
"Domestic aviation":"",
"Rail":"0",
"Domestic navigation":"0.1",
"Residential":"0.2",
"Commercial and public services":"0",
"Agriculture/forestry":"0.2",
"Sub-bituminous coal / Lignite":"",
"Other bituminous coal":"",
"Natural gas":"0",
"Motor gasoline excl. bio":"0.3",
"Gas/diesel oil excl. bio":"2.2"
}]
}]
我想从每个键(国家)中提取特定值(例如道路、铁路),并从每个对象中绘制一个单独的饼图。例如,阿尔巴尼亚的一张图表显示了公路和铁路的价值,然后是数据集中下一个国家的相同图表。
我正在尝试使用以下代码实现此目的:
function checkIt(data) {
var countriesByName = d3.nest()
.key(function(d) { return d.Country_Names; })
.entries(data);
//console.log(countriesByName)
var data = JSON.stringify(countriesByName);
console.log(data);
function makePie() {
function myfunc(data){
var obj = [];
for (var i in data.key) {
obj.push('Road' + m.countriesByName[i].key.values[i].Food+ ' and tobacco');
}
}
var data1 = myfunc(data);
//console.log(data)
var chart = c3.generate({
bindto: "#left",
data: {
columns: [
data1
],type : "donut"
}
});
}
makePie();
};
d3.json("https://gist.githubusercontent.com/heenaI/cbbc5c5f49994f174376/raw/82cd19eff7db367193cf8ce00144a40ea8d140ac/data.json", checkIt);
我收到以下错误:
未捕获的类型错误:无法读取未定义的属性“0”
这是数据集的JS fiddle:
预期的结果是这样的 ["Road", 2.2] 然后我想将它作为循环运行数据中的所有国家/地区以获得相似的数组
【问题讨论】:
-
array.map将成为您将数组实际修改为最终结果的朋友。和array.reduce用于将您的values数组变成某种东西。例如对所有rail值求和。 -
您的图表插件期望什么样的数据对象... ??? ,, 您应该构建图表所期望的 json 并将其作为参数发送
-
jsfiddle.net/n5v84svm/32 => 未定义;
data.key不要像我想的那样工作...... -
进一步查看代码和错误,似乎需要一个二维数组,其中数据对象中有
columns。 -
我一直在摆弄它,
columns: [[data1]],把它变成一个二维数组确实消除了错误,现在的问题是它应该是什么样子?什么样的数据?小提琴是你所有的代码吗?
标签: javascript jquery arrays json