我有一个像
这样的平面csv文件name,roll,section,hh
a,1,k,34
a,1,r,5
你可以看到“名称”中有重复的数据,如“a”。我想将这些转换为html嵌套列表,如下所示
|a
---------------------
|1
------------------
|k
---------------
| 34
---------------
| r
---------------
| 5
---------
所以我认为我可以将它们转换为嵌套的json结构,然后使用js将其转换为html。
如何将此数据转换为嵌套的json,如下所示?
{
"name":"a"
"roll":"1"
"section":["k","r"],
"hh":["34","5"]
}
}
有没有其他方法可以将这些csv数据呈现给html嵌套列表? 请帮忙。
编辑: 对于json部分,我已经用$ .toJSON($ .csv.toObjects(data))转换了csv 使用js插件。但是找不到像我所示的那样制作嵌套json的方法。
答案 0 :(得分:0)
以CSV格式输入:
name,roll,section,hh
a,1,k,34
a,1,r,5
数据的每一行代表从 root 到叶节点的完整路径。所以我们可以逐行分割并将其累积到JSON对象。假设您有一个函数,它将上面的CSV文本解析为一个令牌数组,如下所示:
var lines = $.csv.toArrays(csv);
lines
现在将成为字符串的2D数组,如下所示:
[
['name','roll','section','hh'],
['a','1','k','34'],
['a','1','r','5']
]
忽略第一行作为标题,遍历每一行,并累积JSON对象:
var people = [];
lines.slice(1).forEach(function(person){
// Check if this person has already been added to the people list?
if (people.filter().length>0){
// Update the existing person in the list
for (var p in people){
if (people[p].name === person[0]){
people[p].section.push(person[2]);
people[p].section.push(person[3]);
}
}
}
else{
// Add a new one
people.push({
name: person[0],
roll: person[1],
section: [person[2],
hh: [person[3]]
});
}
});