Javascript 将大型CSV文件转换为JSON
我不介意这是通过单独的程序完成的,比如Excel、NodeJS或web应用程序 这与此处描述的问题完全相同: 似乎OP没有得到这个答案(但还是接受了它?)。我试过用它,但似乎也没法用 简而言之:我正在使用~50000行CSV,我想将其转换为JSON。我尝试了几乎所有在线“csv到json”Web应用程序,所有这些应用程序都会因如此大的数据集而崩溃 我尝试了许多Javascript 将大型CSV文件转换为JSON,javascript,json,excel,node.js,csv,Javascript,Json,Excel,Node.js,Csv,我不介意这是通过单独的程序完成的,比如Excel、NodeJS或web应用程序 这与此处描述的问题完全相同: 似乎OP没有得到这个答案(但还是接受了它?)。我试过用它,但似乎也没法用 简而言之:我正在使用~50000行CSV,我想将其转换为JSON。我尝试了几乎所有在线“csv到json”Web应用程序,所有这些应用程序都会因如此大的数据集而崩溃 我尝试了许多NodeCSV-to-JSON模块,但它们都崩溃了。csvtojson模块似乎很有希望,但我遇到了以下错误:致命错误:JS分配失败-进程
Node
CSV-to-JSON模块,但它们都崩溃了。csvtojson
模块似乎很有希望,但我遇到了以下错误:致命错误:JS分配失败-进程内存不足
我到底能做些什么来获取可用格式的数据?如上所述,我不介意它是一个应用程序,一个在Excel中工作的应用程序,一个webapp或一个节点模块,只要我得到一个.JSON
文件或一个可以在节点中使用的对象
有什么想法吗?当您处理如此大的数据集时,您需要编写流式处理,而不是加载>转换>保存。因为加载这么大的东西-不适合内存 CSV文件本身非常简单,在格式上几乎没有差异。因此,您可以自己编写简单的解析器。JSON通常也很简单,可以很容易地逐行处理,而无需加载整个内容
on('data',…)
处理读取数据:附加到常规字符串,并提取完整行(如果可用)npm安装csv
)。下面是一个示例应用程序,它将JSON对象写入文件:
var csv=require('csv'))
var fs=require('fs')
var f=fs.createReadStream('Fielding.csv')
var w=fs.createWriteStream('out.txt')
w、 写(“[”);
csv()
.from.stream(f,{columns:true})
.transform(函数(行、索引){
返回(索引===0?“”:,\n')+JSON.stringify(行);
})
.to.stream(w,{columns:true,end:false})
.on('end',function(){
w、 写(']');
w、 end();
});
请注意将列名称保留在JSON对象中所需的
columns
选项(否则您将得到一个简单数组)和end
选项设置为false
,这告诉节点在CSV流关闭时不要关闭文件流:这允许我们添加最后一个']'。transform
回调为您的程序提供了一种方法,可以将数据挂接到数据流中,并在将数据写入下一个流之前对其进行转换。您在上面提到了csvtojson模块,这是一个开源项目,我正在维护它
很抱歉,这对您不起作用,它是由几个月前解决的一个错误引起的。
我还在自述中为您的场景添加了一些额外的行。请退房
请确保您拥有最新的csvtojson版本。(目前为0.2.2)
您可以通过运行
npm install -g csvtojson
完成后,您只需运行:
csvtojson [path to bigcsvdata] > converted.json
这将从csvfile流式传输数据。或者,如果要从另一个应用程序流式传输数据:
cat [path to bigcsvdata] | csvtojson > converted.json
它们将输出相同的内容
我已经用一个超过300万条记录的csv文件对它进行了手动测试,它可以正常工作
我相信你只需要一个简单的工具。lib的目的是减轻这样的压力。如果您下次遇到任何问题,请务必告诉我,以便我能及时解决。这应该可以解决问题
npm i --save csv2json fs-extra // install the modules
const csv2json = require('csv2json');
const fs = require('fs-extra');
const source = fs.createReadStream(__dirname + '/data.csv');
const output = fs.createWriteStream(__dirname + '/result.json');
source
.pipe(csv2json())
.pipe(output );
- 使用python CLI
csv
文件转换为json
文件,无\n\r
import json
import csv
for x in range(1, 11):
f = open('9447440523-Huge'+str(x)+'.csv', 'r')
reader = csv.DictReader(f)
i=0;
jsonoutput = str(x)+'.json'
with open(jsonoutput, 'a') as f:
f.write('[')
for x in reader:
json.dump(x, f)
f.write(',')
f.write(']')
试着自己写,不时地把它保存到数据库或磁盘上。对不起,我在这里回复有点晚了。这很接近,除了创建的
out.text
不是正确的JSON格式,而是一个包含多行对象的文件(它需要在开始处有[
,在结束处有]
,并且在每行末尾有逗号)。如果您编辑以更正此问题,我将接受答案。我正在尝试csvtojson以获取一个巨大的csv文件(~5GB/1100万行)。我已将该文件拆分为多个文件(每个文件大约20MB/40k行)。即使我按顺序处理这些文件,进程也会继续运行,但在处理了大约50k行之后,会停止向json文件写入更多数据。有什么线索吗?你能粘贴一些关于如何使用它来处理CSV文件的代码吗?即使您直接使用5GB csv也应该可以。我使用的是clicsvtojson--delimiter=##x.csv>y.json
您使用的是什么版本的csvtojson?如果可以,请更新到最新版本..使用>npm install-g csvtojsonfrom package.json:“version”:“0.3.21”我在一个文件中有80lac记录。这段代码帮助我在几秒钟内转换。谢谢@Bogada您已将此代码添加到商店的一个文件中。你能帮我找到一个在代码中使用的变量吗?