将CSV转换为JSON – jQuery

我正在尝试将数据从csv转换为json,但我希望数据遵循某种层次结构。

这是我的CSV

link,model,role,access link1,model1,role1,true link1,model1,role2,true link1,model1,role3,true link1,model1,role4,true link1,model2,role1,false link1,model2,role2,false link1,model2,role3,false link1,model2,role4,false link2,model1,role1,false link2,model1,role2,true link2,model1,role3,false link2,model1,role4,true link2,model2,role1,false link2,model2,role2,true link2,model2,role3,false link2,model2,role4,true 

预期结果

 "link1": { "model1": { "role1": true, "role2": true, "role3": true, "role4": true, }, "model2": { "role1": false, "role2": false, "role3": false, "role4": false, } }, "link2": { "model1": { "role1": false, "role2": true, "role3": false, "role4": true, }, "model2": { "role1": false, "role2": true, "role3": false, "role4": true, } } 

我试图从这个jquery做- 从平面json创建嵌套json ,但问题是它只有1级,但在我的情况下它是两个级别。

我想这样做,

 data.forEach(function(val) { newData[val.link] = {val.model : {val.role: val.access}}; }); 

但是真的无法让它发挥作用。 我对数据部分很陌生,任何帮助或建议将不胜感激。

提前致谢

在这种特殊情况下,解析CSV格式实际上非常简单。 请参阅下面的代码段。

我已经用\n分割主CSV字符串以获取行。 现在跳过第一行(即标题),您只需获取每列的值并将其推入结果obj

 var str = `link,model,role,access link1,model1,role1,true link1,model1,role2,true link1,model1,role3,true link1,model1,role4,true link1,model2,role1,false link1,model2,role2,false link1,model2,role3,false link1,model2,role4,false link2,model1,role1,false link2,model1,role2,true link2,model1,role3,false link2,model1,role4,true link2,model2,role1,false link2,model2,role2,true link2,model2,role3,false link2,model2,role4,true`; var lines = str.split('\n'); var obj = {}; // Ignore the first line as it contains only the header info. for(var i = 1; i < lines.length; i++) { var lineItems = lines[i].split(','); var link = lineItems[0]; var model = lineItems[1]; var role = lineItems[2]; var roleValue = lineItems[3]; if(obj[link] == undefined) { obj[link] = {}; } if(obj[link][model] == undefined) { obj[link][model] = {}; } obj[link][model][role] = roleValue; } console.log(obj); 

由于它在d3中标记,d3方式将是这样的:

  • 使用d3.CSV
  • 然后使用d3.nest卷起值
  d3.csv("https://gist.githubusercontent.com/cyrilcherian/649d692647ddc70afda93be607427221/raw/bbb95b10d1aca62b17f75534039fb7e8a7c911ba/some.csv", function(data) {; var nested_data = d3.nest() .key(function(d) { return d.link; }) .key(function(d) { return d.model; }) .rollup(function(leaves) { return { role1: leaves.find(d => d.role == "role1").access, role2: leaves.find(d => d.role == "role2").access, role3: leaves.find(d => d.role == "role3").access, role4: leaves.find(d => d.role == "role4").access }; }) .entries(data); console.log(nested_data) });