将大型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:这允许我们添加最后的']'。 transform
callback为您的程序提供了一种方法,可以在将数据写入下一个stream之前将其挂接到数据stream中并转换数据。
当你使用这么大的数据集时,你需要编写stream式处理而不是加载>转换>保存。 加载这么大的东西 – 不适合内存。
它自己的CSV文件是非常简单的,与格式有很大的差异。 所以你可以自己编写简单的parsing器。 而且JSON通常也很简单,并且可以很容易地逐行处理而不需要加载整个事物。
- 来自CSV文件的createReadStream 。
- 新的JSON文件的createWriteStream。
-
on('data', ...)
进程读取数据:附加到一般string,并提取完整行(如果可用)。 - 如果从readStream中获得一行/多行,请将它们转换为JSON对象,并将其推入到新的JSON文件的writeStream中。
这可以用pipe
和中间的自己的pipe道来完成,将pipe道转换成对象,写入新的文件。
这种方法可以避免将整个文件加载到内存中,而是通过加载部分逐渐处理,处理并写入并缓慢前进。
您可以尝试使用OpenRefine(或Google Refine)。
导入您的CSV文件。 那么你可以导出。 编辑JSON格式的模板。
http://multimedia.journalism.berkeley.edu/tutorials/google-refine-export-json/