我正在尝试做一些看起来不仅应该相当容易完成的事情,而且是一项足够常见的任务,可以使用简单的软件包来完成它。我希望获取一个大型 CSV 文件(从关系数据库表中导出)并将其转换为 JavaScript 对象数组。此外,我想将其导出到 .json
文件夹具。
CSV 示例:
a,b,c,d
1,2,3,4
5,6,7,8
...
所需的 JSON:
[
{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...
]
我已经尝试了几个 Node CSV 解析器、流媒体、自称 CSV-to-JSON 库,但我似乎无法得到我想要的结果,或者如果我能的话,它只有在文件较小的情况下才有效。我的文件大小接近 1 GB,行数约为 40m(这将创建 40m 个对象)。我希望它需要流式传输输入和/或输出以避免内存问题。
这是我尝试过的包:
- https://github.com/klaemo/csv-stream
- https://github.com/koles/ya-csv
- https://github.com/davidgtonge/stream-convert (有效,但确实如此 由于我经常更改数据集,因此速度非常慢。解析一个 60 MB 的 csv 文件花了将近 3 个小时)
- https://github.com/cgiffard/CSVtoJSON.js
- https://github.com/wdavidw/node-csv-parser (好像不是 设计用于将 csv 转换为其他格式)
- https://github.com/voodootikigod/node-csv
我正在使用 Node 0.10.6,并希望获得有关如何轻松完成此任务的建议。滚动我自己可能是最好的,但我不确定从哪里开始使用 Node 的所有流功能,特别是因为它们在 0.10.x 中更改了 API。
最佳答案
检查 node.js csvtojson 模块,该模块可用作库、命令行工具或 Web 服务器插件。 https://www.npmjs.org/package/csvtojson . 源代码可以在以下位置找到: https://github.com/Keyang/node-csvtojson
或从 NPM 仓库安装:
npm install -g csvtojson
它支持任何大小的csv数据/字段类型/嵌套json等。一堆功能。
例子
var Converter=require("csvtojson").core.Converter;
var csvConverter=new Converter({constructResult:false, toArrayString:true}); // The constructResult parameter=false will turn off final result construction in memory for stream feature. toArrayString will stream out a normal JSON array object.
var readStream=require("fs").createReadStream("inputData.csv");
var writeStream=require("fs").createWriteStream("outpuData.json");
readStream.pipe(csvConverter).pipe(writeStream);
您也可以将其用作 cli 工具:
csvtojson myCSVFile.csv
关于javascript - Node.js 中的大型 CSV 到 JSON/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617532/