javascript - CSV 数据导入到可嵌套 json 数据

标签 javascript jquery csv

晚上好。

我有一个 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]请帮助我。

最佳答案

首先我将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

关于javascript - CSV 数据导入到可嵌套 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385231/

相关文章:

javascript - 使用列名获取存储值 - EXTJS 4

javascript - "setInterval"函数正在转储构造函数中分配的属性

jquery - 优化: constructing a jquery collection

linux - 从 CLI 将 .csv 转换为 .xlsx

python - .gz 文件到带有配置单元分隔符的 pandas DataFrame

csv - 将 csv 文件从 s3 复制到 redshift 时出现问题

javascript - 删除运算符(operator)困惑

javascript - 在 Javascript 中获取图像变量的高度和宽度

javascript - Wordpress Ajax - 始终返回 0

javascript - 自动滚动 DIV -