将大型CSV文件转换为JSON

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

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

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

看来,OP没有得到这个答案工作(仍然接受呢?)。 我试过用它,但似乎无法得到它的工作。

简而言之:我正在处理大约50,000行的CSV,我想将其转换为JSON。 我已经尝试了几乎所有在线的“csv到json”的web应用程序,所有崩溃与这个大的数据集。

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

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

有任何想法吗?

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

对不起,它不适合你,这是几个月前解决的一个错误造成的。 我还在自述文件中添加了一些额外的行。 请查看在命令行中处理Big CSV文件 。

请确保你有最新的csvtojson版本。 (目前是0.2.2)

您可以通过运行来更新它

 npm install -g csvtojson 

安装最新的csvtojson之后 ,您只需运行:

 csvtojson [path to bigcsvdata] > converted.json 

这从csvfilestream数据。 或者如果你想从另一个应用程序stream数据:

 cat [path to bigcsvdata] | csvtojson > converted.json 

他们会输出同样的东西。

我已经用csv文件手动testing了300多万条logging,并且没有问题。

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

npm csv软件包能够处理CSVstream,而不必将完整的文件存储在内存中。 你需要安装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(); }); 

请注意columns选项,需要保留JSON对象中的列名称(否则您将获得一个简单的数组), end选项设置为false ,这告诉节点不closuresCSVstreamclosures时的文件stream:这允许我们添加最后的']'。 transformcallback为您的程序提供了一种方法,可以在将数据写入下一个stream之前将其挂接到数据stream中并转换数据。

当你使用这么大的数据集时,你需要编写stream式处理而不是加载>转换>保存。 加载这么大的东西 – 不适合内存。

它自己的CSV文件是非常简单的,与格式有很大的差异。 所以你可以自己编写简单的parsing器。 而且JSON通常也很简单,并且可以很容易地逐行处理而不需要加载整个事物。

  1. 来自CSV文件的createReadStream 。
  2. 新的JSON文件的createWriteStream。
  3. on('data', ...)进程读取数据:附加到一般string,并提取完整行(如果可用)。
  4. 如果从readStream中获得一行/多行,请将它们转换为JSON对象,并将其推入到新的JSON文件的writeStream中。

这可以用pipe和中间的自己的pipe道来完成,将pipe道转换成对象,写入新的文件。

这种方法可以避免将整个文件加载到内存中,而是通过加载部分逐渐处理,处理并写入并缓慢前进。

您可以尝试使用OpenRefine(或Google Refine)。

导入您的CSV文件。 那么你可以导出。 编辑JSON格式的模板。

http://multimedia.journalism.berkeley.edu/tutorials/google-refine-export-json/