如何使用javascript从每个JSON对象提取特定属性

如何使用javascript从每个JSON对象提取特定属性,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个JSON数据集 [{"key":"Albania", "values":[{ "Country_Names":"Albania", "Total":"3.8", "Change_total":"-38.7", "Main activity electricity and heat pro

我有一个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);
我得到以下错误:

未捕获的TypeError:无法读取未定义的属性“0”

以下是数据集的示例:


预期的结果是这样的[“Road”,2.2],然后我想将其作为数据中所有国家的循环运行,以获得类似的数组

您忘记了将json字符串解析为JSONObject,因此无法从字符串访问
属性

var data=JSON.stringify(countriesByName)下必须像这样解析对象:

var data=JSON.parse(数据)

完成此操作后,就可以访问JSONObject属性


检查此项。

array.map
将是您将数组修改为最终结果的朋友。和
array.reduce
,用于将
数组转换为某些内容。例如,对所有的
rail
值求和。您的图表插件希望使用哪种数据对象,,您应该构造图表所期望的json,并将其作为参数=>undefined发送<代码>数据。键
的工作方式与您预期的不一样我认为…进一步查看代码和错误,它似乎希望在数据对象中有
。我一直在摆弄它,
列:[[data1]],将其转换为2D数组确实可以消除错误,现在的问题是它应该是什么样子?什么样的数据?你所有的代码都是小提琴吗?谢谢你的回答我真正想得到的是我的数据中Rail,Road的值,如果结果是这样的[“Road”,2.2],“Rail”,0],然后对数据集中的所有对象运行这个as循环。当我尝试获取其中的值时,demo jsut会给我国家名称,它会返回undefinedThank。。我想我明白我需要做什么。。但现在这一个只是一次发送所有国家的数据,但我想要的是,它从国家获取道路数据_1=>绘制一个饼=>返回从国家2获取数据=>绘制一个饼。。。国家n=>绘制国家n的饼图。我想我必须这样做,如果我走错了方向,你可以指导我,你是想同时画所有的馅饼,还是想选择一个馅饼然后画出来?我会用下拉菜单选择国家的名称,然后创建一个馅饼,但现在我只想创建一个,看看它是否为每个国家创建一个馅饼