2015-06-11 65 views
3

我有一个像嵌套的HTML表,CSV

name,roll,section,hh 
a,1,k,34 
a,1,r,5 

你可以看到有重复,如“一”,在“名称”数据平面CSV文件。我婉这些转换为HTML嵌套表像图所示

|a 
--------------------- 
    |1 
    ------------------ 
     |k 
     --------------- 
      | 34 
     --------------- 
     | r 
     --------------- 
      | 5 
      --------- 

,所以我想我可以用JS将其转换为一个嵌套的JSON结构,然后在HTML中。

如何将这些数据转换为嵌套json,如下所示?

{ 
"name":"a" 
"roll":"1" 
"section":["k","r"], 
"hh":["34","5"] 
} 

}

是否有任何其他方式对这些CSV数据呈现给HTML嵌套列表? 请帮忙。

编辑: 对于JSON部分,我已经采用的js插件转换CSV与$ .toJSON ($ csv.toObjects(数据)。)。但无法找到任何方法来制作像我所示的嵌套json。

+1

分享你的研究可以帮助每个人。告诉我们你试过了什么,以及它为什么不符合你的需求。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案!另请参阅[如何问](http://stackoverflow.com/questions/how-to-ask) – Cerbrus

回答

0

给定的输入在该CSV格式:

name,roll,section,hh 
a,1,k,34 
a,1,r,5 

的数据的每行表示从叶节点一个完整的路由。所以我们可以按行分割并将其累积到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]] 
     }); 
    } 
}); 
+0

谢谢.... :) –