2015-06-11 2 views
3

У меня есть плоский файл CSV, каквложенный список HTML из JSON, CSV

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

вы можете увидеть там повторяются данные, такие как «а» в «имя». Я бледный, чтобы преобразовать их в HTML вложен список, как показано ниже

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

Так я думал, что я могу преобразовать их в вложенную структуру JSON, то в HTML с помощью JS.

Как преобразовать эти данные в вложенный json, как показано ниже?

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

}

Есть ли другой способ представить эти данные в формате CSV в HTML вложен список? прошу помочь.

редактировать: Для JSon части, я преобразовал файл CSV с $ .toJSON с помощью JS плагин ($ 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

спасибо .... :) –

Смежные вопросы