将大型CSV文件转换为JSON

JVG*_*JVG 5 javascript csv excel json node.js

我不介意这是用一个单独的程序,使用Excel,在NodeJS或Web应用程序中完成的.

这与此处描述的问题完全相同:

Node.js中的大型CSV到JSON/Object

OP似乎没有得到工作的答案(但还是接受了吗?).我已经尝试过使用它,但似乎无法让它工作.

简而言之:我正在使用~50,000行CSV,我想将其转换为JSON.我已经尝试了几乎所有在线"csv to json"webapp,所有这些都与这个庞大的数据集崩溃.

我已经尝试了很多NodeCSV到JSON模块,但是,它们都崩溃了.该csvtojson模块似乎很有希望,但我得到了这个错误:FATAL ERROR: JS Allocation failed - process out of memory.

我怎样才能以可用的格式获取这些数据?如上所述,我不介意它是一个应用程序,一个在Excel,webapp或Node模块中工作的东西,只要我得到一个.JSON文件或一个我可以在Node中使用的对象.

有任何想法吗?

Key*_*ang 13

您提到了上面的csvtojson模块,这是我正在维护的一个开源项目.

我很抱歉它没有为你工作,这是由几个月前解决的bug造成的.我还在自述文件的README中添加了一些额外的行.请在命令行中查看Process Big CSV File.

请确保您拥有最新的csvtojson版本.(目前为0.2.2)

您可以通过运行来更新它

npm install -g csvtojson
Run Code Online (Sandbox Code Playgroud)

你以后安装最新csvtojson,你只需要运行:

csvtojson [path to bigcsvdata] > converted.json
Run Code Online (Sandbox Code Playgroud)

这将从csvfile流式传输数据.或者,如果要从其他应用程序流式传输数据:

cat [path to bigcsvdata] | csvtojson > converted.json
Run Code Online (Sandbox Code Playgroud)

他们会输出相同的东西.

我用csv文件手动测试了超过300万条记录,它没有问题.

我相信你只需要一个简单的工具.lib的目的是为了缓解这样的压力.如果下次遇到任何问题,请告诉我,以便及时解决.


Pau*_*gel 5

npm csv程序包能够处理CSV流,而不必将完整文件存储在内存中。您需要安装node.js和csv(npm install csv)。这是一个示例应用程序,它将JSON对象写入文件:

var csv = require('csv')
var fs = require('fs')
var f = fs.createReadStream('Fielding.csv')
var w = fs.createWriteStream('out.txt')

w.write('[');

csv()
.from.stream(f, {columns:true})
.transform(function(row, index) {
    return (index === 0 ? '' : ',\n') + JSON.stringify(row);
})
.to.stream(w, {columns: true, end: false})
.on('end', function() {
     w.write(']');
     w.end();
 });
Run Code Online (Sandbox Code Playgroud)

请注意将columns列名保留在JSON对象中所需的选项(否则,您将获得一个简单的数组),并将end选项设置为false,该选项告诉节点在CSV流关闭时不要关闭文件流:这使我们能够添加最后一个']'。该transform回调提供程序挂接到数据流,然后将其写入下一个数据流转换数据的方式。