简体   繁体   English

如何使用 D3 将 JSON 数据更改为 Javascript 对象数组

[英]How to change JSON data to Javascript array of objects with D3

This is my JSON data (this document is an external file and is called 'data.json')这是我的 JSON 数据(此文档是一个外部文件,名为“data.json”)

[
    {
    "maand": "augustus 2014",
    "weinigSlaap": "0.15",
    "hogeStress": "0.1",
    "langerReistijd": "0.12",
    "hogeWerkdruk": "0.1",
    "lageLiquiditeit": "0.1"
    }
]

and I need it to become this with help of D3.我需要它在 D3 的帮助下变成这个样子。

var data = [
    [
        {
            axis: "Weinig slaap",
            value: 0.15
        }, {
            axis: "Hoge stress",
            value: 0.1
        }, {
            axis: "Lange reistijd",
            value: 0.12
        }, {
            axis: "Hoge werkdruk",
            value: 0.1
        }, {
            axis: "Lage liquiditeit",
            value: 0.1
        }
    ]
];

I'm stuck at this point and don't have any hope in live anymore ;)我被困在这一点上,不再对生活抱有任何希望;)

  d3.json('data.json', function (data) {
      data.push(data);
      console.log(data);
   });

You can try something like this:你可以尝试这样的事情:

 var data = [{ "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" }] var r = /(?:[AZ])/g; var keysToSkip = ["maand"] var result = []; data.forEach(function(d) { var keys = Object.keys(d).filter(x => keysToSkip.indexOf(x) === -1); var _o = keys.map(function(k) { var o = {}; var parsedVal = k.replace(r, function(s) { return " " + s }); return { axis: toTitleCase(parsedVal), value: d[k] } }) result.push(_o); }) console.log(result) function toTitleCase(str) { return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase() }

For you, Javascript alone is enough as shown below.对您来说,仅 Javascript 就足够了,如下所示。 Keep this code inside your d3.json success callback.将此代码保存在 d3.json 成功回调中。

 var data = [{ "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" }], mappedData = []; for (var i = 0; i < data.length; i++) { var eachObjArr = []; for (key in data[i]) { if (data[i].hasOwnProperty(key)) { var obj = {}; obj[key] = data[i][key]; eachObjArr.push({ axis: key, value: data[i][key] }); } } mappedData.push(eachObjArr); } for (var i = 0; i < mappedData.length; i++) { console.log(mappedData[i]); }

With Object.keys you can iterate through keys of the object, and this is what you get:使用Object.keys你可以遍历对象的键,这就是你得到的:

 var d = { "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" } var r = Object.keys(d).map(k => ({ axis: k.replace(/[AZ]/g, l => (' ' + l.toLowerCase())), value: Number(d[k]) })) console.log(r)

clearly es6 helps here !显然 es6 在这里有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM