2015-04-01 37 views
0

晚上好。CSV数据导入到可嵌套的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) 

我遍历所有的数据,比较级参数转换为前一个参数。我还把父母放在一堆,这个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 /)。图(函数(行,索引){' 这里是代码的方式,第一行上的主题行应该去零线我喜欢,如果你想忽略和放?首先,由于主题行csv线。 – taebu 2015-04-02 01:16:21