【问题标题】:How to extract specific properties from each JSON object using javascript如何使用 javascript 从每个 JSON 对象中提取特定属性
【发布时间】: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


【解决方案1】:

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

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

var data = JSON.parse(data);

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

检查这个Demo

【讨论】:

  • 感谢您的回答,我真正想得到的是我的数据中 Rail, Road 的值,如果像这样 ["Road", 2.2], ["Rail", 0 ] 然后将其作为数据集中所有对象的循环运行。演示 jsut 给了我国家名称,当我尝试获取其中的值时,它返回 undefined
  • 谢谢你..我想我明白我需要做什么..但是这个现在只是一次发送所有国家的数据,但我想要的是它从 country_1 获取道路数据=> 绘制饼图 => 返回从国家 2 获取数据 => 绘制饼图...国家 n => 绘制国家 n 的饼图。我想我必须做这样的事情,如果我走错了方向,你可以指导我jsfiddle.net/1dtr3ht3/4
  • 是要同时画所有的饼图,还是选择一个饼图再画?
  • 我将通过下拉菜单选择国家名称,然后创建一个饼图
  • 但到目前为止,我只想创建,看看它是否为每个国家/地区创建了一个馅饼
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2018-09-18
  • 1970-01-01
相关资源
最近更新 更多