2015-04-01 2 views
0

Добрый вечер.CSV DATA импорт в вложенные данные json

У меня есть данные CSV, как показано ниже.

level,label,price 
1,menu1,3000 
2,menu1_1,5000 
2,menu1_2,6000 
2,menu1_3,7000 
1,menu2,8000 
2,menu2_1,5000 
3,menu2_1_1,5000 
3,menu2_1_2,7000 
2,menu2_2,6000 
2,menu2_3,7000 
1,menu3,9000 
1,menu4,10000 

Я хочу, чтобы преобразовать эти данные в данные json, как показано ниже. Необходимо, чтобы в рекурсивной форме вы писали код javascript, который я вижу?

[ 
    { 
     "id": 1, 
     "label": "menu1", 
     "price": "3000", 
     "children": [ 
      { 
       "id": 2, 
       "label": "menu1_1", 
       "price": "5000", 
       "children": [] 
      }, 
      { 
       "id": 3, 
       "label": "menu1_2", 
       "price": "6000", 
       "children": [] 
      }, 
      { 
       "id": 4, 
       "label": "menu1_1", 
       "price": "7000", 
       "children": [] 
      } 
     ] 
    }, 
    { 
     "id": 5, 
     "label": "menu2", 
     "price": "8000", 
     "children": [ 
      { 
       "id": 6, 
       "label": "menu2_1", 
       "price": "5000", 
       "children": [ 
        { 
         "id": 7, 
         "label": "menu2_1_1", 
         "price": "5000", 
         "children": [] 
        }, 
        { 
         "id": 8, 
         "label": "menu2_1_2", 
         "price": "7000", 
         "children": [] 
        } 
       ] 
      }, 
      { 
       "id": 9, 
       "label": "menu2_2", 
       "price": "6000", 
       "children": [] 
      }, 
      { 
       "id": 10, 
       "label": "menu2_3", 
       "price": "7000", 
       "children": [] 
      } 
     ] 
    }, 
    { 
     "id": 11, 
     "label": "menu3", 
     "price": "9000", 
     "mnu_img": "", 
     "index": 46, 
     "children": [] 
    }, 
    { 
     "id": 12, 
     "label": "menu4", 
     "price": "10000", 
     "mnu_img": "", 
     "index": 50, 
     "children": [] 
    } 
] 

Однако у меня есть трансформация, импортирующая источник CSV. Примечание: http://techslides.com/convert-csv-to-json-in-javascript

Спасибо за ваш ответ. но небольшая проблема показана ниже. enter image description here

Мне не нужен array[0], пожалуйста, помогите мне.

ответ

1

Сначала я анализирую данные CSV для Js объектов:

var array = data.split("\n").map(function(row, index) { 
    var arr = row.split(",") 
    return { 
    id: index+1, 
    level: +arr[0], 
    label: arr[1], 
    price: arr[2], 
    children: [] 
    } 
}) 

Затем добавить уровень 0, так что все имеет родителя:

array.unshift({ level: 0, children: [] }) 
var parents = array.slice(0,1) 

I цикл по данным, сравнивая уровня до предыдущего. Я также держу родителей в стеке, с этим уровнем 0 родителем внизу.

for(var i=1; i<array.length; i++) { 
    var prev = array[i-1] 
    var obj = array[i] 
    var p = parents[parents.length-1] 
    if(obj.level > prev.level) { 
    parents.push(prev) 
    p = prev 
    } else if (obj.level < prev.level) { 
    do { 
     p = parents.pop() 
    } while(obj.level < p.level) 
    p = parents[parents.length-1] 
    } 
    p.children.push(obj) 
} 

Наконец я зачитал результат

var result = parents[0].children 
console.log(result) 

Рабочий пример: http://jsbin.com/zexiyigili/1/edit?js,console

+0

О, это мой ответ на вопрос @OLLiM. Отлично. 'var array = data.split (/ \ r \ n /). map (function (row, index) {' Вот код, в котором строка темы на первой строке должна перейти в нулевую строку. Мне бы хотелось, чтобы вы проигнорировали и поставили? Во-первых, из-за строки темы линия csv. – taebu