来自json,csv的嵌套html列表

时间:2015-06-11 06:45:32

标签: javascript html json csv

我有一个像

这样的平面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的方法。

1 个答案:

答案 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]]
        });
    }
});