Javascript 将大型CSV文件转换为JSON

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分配失败-进程

我不介意这是通过单独的程序完成的,比如Excel、NodeJS或web应用程序

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

似乎OP没有得到这个答案(但还是接受了它?)。我试过用它,但似乎也没法用

简而言之:我正在使用~50000行CSV,我想将其转换为JSON。我尝试了几乎所有在线“csv到json”Web应用程序,所有这些应用程序都会因如此大的数据集而崩溃

我尝试了许多
Node
CSV-to-JSON模块,但它们都崩溃了。
csvtojson
模块似乎很有希望,但我遇到了以下错误:
致命错误:JS分配失败-进程内存不足

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


有什么想法吗?

当您处理如此大的数据集时,您需要编写流式处理,而不是加载>转换>保存。因为加载这么大的东西-不适合内存

CSV文件本身非常简单,在格式上几乎没有差异。因此,您可以自己编写简单的解析器。JSON通常也很简单,可以很容易地逐行处理,而无需加载整个内容

  • 从CSV文件
  • 为新JSON文件创建WriteStream
  • on('data',…)
    处理读取数据:附加到常规字符串,并提取完整行(如果可用)
  • 如果readStream中有一行或多行可用,则将它们转换为JSON对象并推入新JSON文件的writeStream
  • <>这是很好的,用<代码>管道<代码>,在中间有自己的管道,将线转换成对象,写入新文件。< /P> 这种方法可以避免将整个文件加载到内存中,但使用加载部分逐步处理,处理并写入,然后缓慢前进。

    npm包能够处理CSV流,而无需将完整文件存储在内存中。您需要安装node.js和csv(
    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也应该可以。我使用的是cli
    csvtojson--delimiter=##x.csv>y.json
    您使用的是什么版本的csvtojson?如果可以,请更新到最新版本..使用>npm install-g csvtojsonfrom package.json:“version”:“0.3.21”我在一个文件中有80lac记录。这段代码帮助我在几秒钟内转换。谢谢@Bogada您已将此代码添加到商店的一个文件中。你能帮我找到一个在代码中使用的变量吗?