javascript - CSV DATA import to nestable json data -
good evening.
i have csv data shown below.
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
i want convert data json data shown below. necessary recursive form should write javascript code see?
[ { "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": [] } ]
however, have transformation import csv source. note url: http://techslides.com/convert-csv-to-json-in-javascript
thanks answer. little problem shown below.
i don't need array[0]
please me.
first parse csv data js objects:
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: [] } })
then add level 0, has parent:
array.unshift({ level: 0, children: [] }) var parents = array.slice(0,1)
i loop on data, comparing level parameter previous one. keep parents in stack, level 0 parent @ bottom.
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) { { p = parents.pop() } while(obj.level < p.level) p = parents[parents.length-1] } p.children.push(obj) }
finally read out result
var result = parents[0].children console.log(result)
working example: http://jsbin.com/zexiyigili/1/edit?js,console
Comments
Post a Comment