nev*_*fox 13 javascript csv json node.js
我正在尝试做一些似乎不仅要完成相当简单的事情,而且要做一个足够普通的任务,以便有可用的简单包.我希望获取一个大型CSV文件(从关系数据库表导出)并将其转换为JavaScript对象数组.此外,我想将其导出到.json文件夹具.
示例CSV:
a,b,c,d
1,2,3,4
5,6,7,8
...
Run Code Online (Sandbox Code Playgroud)
期望的JSON:
[
{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...
]
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几个节点CSV解析器,流式传输器,自称为CSV到JSON的库,但我似乎无法得到我想要的结果,或者如果我能它只能在文件较小的情况下工作.我的文件大小接近1 GB,行数约为40 m(可创建40 m对象).我希望它需要流输入和/或输出以避免内存问题.
以下是我尝试过的软件包:
我正在使用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
Run Code Online (Sandbox Code Playgroud)
它支持任何大小的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);
Run Code Online (Sandbox Code Playgroud)
您还可以将其用作cli工具:
csvtojson myCSVFile.csv
Run Code Online (Sandbox Code Playgroud)
虽然这远不是一个完整的答案,但您可以将您的解决方案基于https://github.com/dominictarr/event-stream。自述文件中的改编示例:
var es = require('event-stream')
es.pipeline( //connect streams together with `pipe`
process.openStdin(), //open stdin
es.split(), //split stream to break on newlines
es.map(function (data, callback) { //turn this async function into a stream
callback(null
, JSON.stringify(parseCSVLine(data))) // deal with one line of CSV data
}),
process.stdout
)
Run Code Online (Sandbox Code Playgroud)
之后,我希望每行都有一堆字符串化的 JSON 对象。然后需要将其转换为数组,您可以使用该数组并将其附加,到每行的末尾,在最后删除它,然后将[和添加]到文件的开头和结尾。
parseCSVLine必须配置函数以将 CSV 值分配给正确的对象属性。在传递文件的第一行之后,这可以相当容易地完成。
我确实注意到该库没有在 0.10 上进行测试(至少没有在 Travis 上进行测试),所以要小心。也许npm test你自己运行源代码。
| 归档时间: |
|
| 查看次数: |
17167 次 |
| 最近记录: |