Javascript 如何在Node.js中将CSV转换为JSON

Javascript 如何在Node.js中将CSV转换为JSON,javascript,json,node.js,csv,express,Javascript,Json,Node.js,Csv,Express,我正在尝试将csv文件转换为json。我正在使用 示例CSV: a,b,c,d 1,2,3,4 5,6,7,8 ... 所需的JSON: {"a": 1,"b": 2,"c": 3,"d": 4}, {"a": 5,"b": 6,"c": 7,"d": 8}, ... 我尝试了节点csv解析器库。但是输出像数组,不像我期望的那样 我正在使用Node 0.8和express.js,希望得到一个关于如何轻松完成此任务的建议。您可以尝试使用 首先使用以下函数转换数组中的行: var letters

我正在尝试将csv文件转换为json。我正在使用

示例CSV:

a,b,c,d
1,2,3,4
5,6,7,8
...
所需的JSON:

{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...
我尝试了节点csv解析器库。但是输出像数组,不像我期望的那样

我正在使用Node 0.8和express.js,希望得到一个关于如何轻松完成此任务的建议。

您可以尝试使用

首先使用以下函数转换数组中的行:

var letters = _.toArray(a,b,c,d);
var numbers = _.toArray(1,2,3,4);
var json = _.object(letters, numbers);
然后使用以下函数将阵列对象化:

var letters = _.toArray(a,b,c,d);
var numbers = _.toArray(1,2,3,4);
var json = _.object(letters, numbers);
到那时,json变量应该包含如下内容:

{"a": 1,"b": 2,"c": 3,"d": 4}

我还没有尝试过csv包,但根据文档,它看起来是一个高质量的实现

是一个全面的nodejs csv解析器。在
browserify
webpack
的帮助下,它可以用作node.js应用程序库/命令行工具/或浏览器

源代码可在以下位置找到:

它速度快,内存消耗低,但功能强大,可以通过丰富的API和易于阅读的文档支持任何解析需求

详细的文档可以找到

以下是一些代码示例: 将其用作Node.js应用程序中的库(csvtojson@2.0.0+):

sh# npm install csvtojson
sh# ./node_modules/csvtojson/bin/csvtojson ./youCsvFile.csv
  • 通过
    npm
  • npm安装--保存csvtojson@latest
    

  • 在node.js应用程序中使用它:
  • //需要csvtojson
    var csv=要求(“csvtojson”);
    //使用csvtojson转换csv文件
    csv()
    .fromFile(csvFilePath)
    .then(函数(jsonArrayObj){//解析完成后,将在此处发出结果。
    console.log(jsonArrayObj);
    })
    //使用流/管道解析大型csv(内存消耗低)
    csv()
    .fromStream(readableStream)
    .subscribe(函数(jsonObj){//将为每个csv行发出一个json对象
    //异步解析每个json
    返回新承诺(功能(解决、拒绝){
    asyncStoreToDb(json,函数(){resolve()})
    })
    }) 
    //使用异步/等待
    const jsonArray=await csv().fromFile(filePath);
    
    将其用作命令行工具:

    sh# npm install csvtojson
    sh# ./node_modules/csvtojson/bin/csvtojson ./youCsvFile.csv
    
    -或-

    对于高级使用:

    sh#csvtojson——帮助
    

    您可以从上面的github页面找到更多详细信息。

    这里有一个不需要单独模块的解决方案。但是,它非常粗糙,并且没有实现很多错误处理。它也可以使用更多的测试,但它会让你去。如果您正在解析非常大的文件,您可能需要寻找替代方法。还有,看看这个

    节点模块代码,csv2json.js:
    我和我的朋友创建了一个web服务来处理这种事情

    查看有关如何通过单个RESTful调用将CSV转换为JSON的说明

    我一开始是这样做的,但它给我的链接带来了太多依赖项

    基于你的问题和答案,我使用了和


    不得不做一些类似的事情,希望这能有所帮助

    // Node packages for file system
    var fs = require('fs');
    var path = require('path');
    
    
    var filePath = path.join(__dirname, 'PATH_TO_CSV');
    // Read CSV
    var f = fs.readFileSync(filePath, {encoding: 'utf-8'}, 
        function(err){console.log(err);});
    
    // Split on row
    f = f.split("\n");
    
    // Get first row for column headers
    headers = f.shift().split(",");
    
    var json = [];    
    f.forEach(function(d){
        // Loop through each row
        tmp = {}
        row = d.split(",")
        for(var i = 0; i < headers.length; i++){
            tmp[headers[i]] = row[i];
        }
        // Add object to list
        json.push(tmp);
    });
    
    var outPath = path.join(__dirname, 'PATH_TO_JSON');
    // Convert object to string, write json to file
    fs.writeFileSync(outPath, JSON.stringify(json), 'utf8', 
        function(err){console.log(err);});
    
    //文件系统的节点包
    var fs=需要('fs');
    var path=require('path');
    var filePath=path.join(uu dirname,'path_TO_CSV');
    //读取CSV
    var f=fs.readFileSync(文件路径,{encoding:'utf-8'},
    函数(err){console.log(err);};
    //一字排开
    f=f.split(“\n”);
    //获取列标题的第一行
    headers=f.shift().split(“,”);
    var json=[];
    f、 forEach(函数(d){
    //循环遍历每一行
    tmp={}
    行=d.拆分(“,”)
    对于(变量i=0;i
    使用:

    包对于所有BI处理都足够了。 然后:

    var ETL=require('node-etl');
    var output=ETL.extract('./data.csv',{
                  headers:["a","b","c","d"],
                  ignore:(line,index)=>index!==0, //ignore first line
     });
    
    使用,我将更详细地解释如何使用它

    我使用这个库将csv字符串转换为json数组。 它有多种功能,可以帮助您转换为JSON。
    它还支持从文件读取和文件流

    分析csv时要小心,因为csv可能包含逗号(,)或任何其他分隔符。 有关删除分隔符的信息,请参见我的答案。

    步骤1:

    安装节点模块: npm安装csvtojson--保存

    步骤2:

    var Converter = require("csvtojson").Converter;
    
    var converter = new Converter({});
    
    converter.fromFile("./path-to-your-file.csv",function(err,result){
    
        if(err){
            console.log("Error");
            console.log(err);  
        } 
        var data = result;
    
        //to check json
        console.log(data);
    });
    

    如果您只需要一个命令行转换器,那么对我来说最快捷、最干净的解决方案就是使用via(默认情况下包含在node.js中)

    $npx csvtojson./data.csv>data.json
    

    我有一个非常简单的解决方案,使用csvtojson模块在控制台上从csv打印json

    // require csvtojson
    var csv = require("csvtojson");
    
    const csvFilePath='customer-data.csv' //file path of csv
    csv()
    .fromFile(csvFilePath)``
    .then((jsonObj)=>{
        console.log(jsonObj);
    })
    

    使用ES6

    const toJSON = csv => {
        const lines = csv.split('\n')
        const result = []
        const headers = lines[0].split(',')
    
        lines.map(l => {
            const obj = {}
            const line = l.split(',')
    
            headers.map((h, i) => {
                obj[h] = line[i]
            })
    
            result.push(obj)
        })
    
        return JSON.stringify(result)
    }
    
    const csv = `name,email,age
    francis,francis@gmail.com,33
    matty,mm@gmail.com,29`
    
    const data = toJSON(csv)
    
    console.log(data)
    
    输出

    // [{"name":"name","email":"email","age":"age"},{"name":"francis","email":"francis@gmail.com","age":"33"},{"name":"matty","email":"mm@gmail.com","age":"29"}]
    

    npm安装csvjson——保存 在您的节点JS文件中

    const csvjson=require('csvjson');
    convertCSVToJSON(*.csv);
    convertCSVToJSON=(文件)=>{
    const convertedObj=csvjson.toObject(文件);
    
    }
    已添加代码。从0.3.0版开始,csvtojson不依赖于任何其他库,请参见此处的更详细文档。它的行为将类似于一个适当的流对象。指向博客的链接已失效。已更新。谢谢你让我知道。我不知道这是否只发生在我身上,但对于一个大的CSV文件来说,这会变慢。大概比d3慢10秒,看起来令人印象深刻。我写了一篇关于brnrd提出的类似解决方案的小博文:异步和下划线对你来说太多了?@Spencer,在我发布的时候,依赖项是不同的:拉入express进行csv转换感觉不自然,是的,这是一个疯狂的依赖项。我的错,这个没有csvtojson那么好用。当我有“2016年8月23日”时,它将2016年8月23日和2016年8月23日分为不同的夏季。您可以用引号将日期括起来来修复它?或者甚至
    var json=f.map(函数(d,i){…return tmp;}
    指向此库的链接已断开-可能它已移动到Github上的其他地方(或forked?)。请更新链接。谢谢@RohitParte。这是我在NodeJs中的第一个模块之一。虽然一些功能工作正常,但它缺少很多功能。我开始忙于其他事情(Reliab)
    var Converter = require("csvtojson").Converter;
    
    var converter = new Converter({});
    
    converter.fromFile("./path-to-your-file.csv",function(err,result){
    
        if(err){
            console.log("Error");
            console.log(err);  
        } 
        var data = result;
    
        //to check json
        console.log(data);
    });
    
    // require csvtojson
    var csv = require("csvtojson");
    
    const csvFilePath='customer-data.csv' //file path of csv
    csv()
    .fromFile(csvFilePath)``
    .then((jsonObj)=>{
        console.log(jsonObj);
    })
    
    const toJSON = csv => {
        const lines = csv.split('\n')
        const result = []
        const headers = lines[0].split(',')
    
        lines.map(l => {
            const obj = {}
            const line = l.split(',')
    
            headers.map((h, i) => {
                obj[h] = line[i]
            })
    
            result.push(obj)
        })
    
        return JSON.stringify(result)
    }
    
    const csv = `name,email,age
    francis,francis@gmail.com,33
    matty,mm@gmail.com,29`
    
    const data = toJSON(csv)
    
    console.log(data)
    
    // [{"name":"name","email":"email","age":"age"},{"name":"francis","email":"francis@gmail.com","age":"33"},{"name":"matty","email":"mm@gmail.com","age":"29"}]