我试图将数据从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 - creating nested json from flat json开始,但事情是它只有1级,但在我的情况下它是两个级别。
我想这样做,
data.forEach(function(val) {
newData[val.link] = {val.model : {val.role: val.access}};
});
但无法让它真正发挥作用。我对数据部分很陌生,任何帮助或建议都会非常感激。
提前致谢
答案 0 :(得分:2)
在这种特殊情况下解析CSV格式实际上非常简单。请参阅下面的代码段。
我已将主要的CSV字符串拆分为\n
以获取这些行。现在跳过第一行(即标题),您只需要获取每列的值并将其推送到结果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);
&#13;
答案 1 :(得分:0)
由于它在d3中被标记,因此d3方式将是这样的:
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)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.2/d3.js"></script>
它以键/值方式返回数据,需要根据您的JSON格式进行映射。
不完整但我想分享。