javascript - Node.js 中的大型 CSV 到 JSON/对象

标签 javascript json node.js csv

我正在尝试做一些看起来不仅应该相当容易完成的事情,而且是一项足够常见的任务,可以使用简单的软件包来完成它。我希望获取一个大型 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 个对象)。我希望它需要流式传输输入和/或输出以避免内存问题。

这是我尝试过的包:

我正在使用 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/

相关文章:

javascript - Extjs/Javascript - 在函数返回之前等待 MessageBox 响应

javascript - 如果超时则取消正则表达式匹配

javascript - 我有一个 php 文件,它提供 JSON 输出,并希望在 D3 中使用该 JSON

javascript - 如何正确使用json

c# - 带有 MVC4 的 Newtonsoft JSON 无法转换参数类型

javascript - Visual Studio Code 找不到模块 'typegram/callback'

node.js - AWS Elasticsearch http请求,错误 'The bulk request must be terminated by a newline'

javascript - 如何在我的 Javascript 中访问 PHP 数组?

javascript - 单击按钮后加载图像

javascript - 如何以编程方式设置 WebKit 密码文本字段的值?