如何使用 Node.js 将 CSV 文件转换为 JSON 脚本?

Posted

技术标签:

【中文标题】如何使用 Node.js 将 CSV 文件转换为 JSON 脚本?【英文标题】:How to convert a CSV file into a JSON script using Node.js? 【发布时间】:2016-09-02 08:25:06 【问题描述】:

test.csv 文件有:

"Id","UserName","Age"
"01","Sam Smith","33"
"02","Fred Frankly","44"
"03","Zachary Zupers","55"

预期输出:作为 Json 文件

["id":01,"User Name": " Sam Smith", "Age":"33",
"id":03,"User Name": " Fred Frankly", "Age":"44"
"id":03,"User Name": "Aachary Zupers", "Age":"55"
]

我尝试使用 node.js 解决这样的问题

var fs = require("fs");

var data = fs.readFileSync('test.csv');
var stringData=data.toString();

console.log(stringData);
var arrayOne= stringData.split('\r\n');

var header=arrayOne[0].split(',');
var noOfRow=arrayOne.length;
var noOfCol=header.length;

var jArray=[];

var i=0,j=0;
for (i = 1; i < noOfRow-1; i++) 

    for (j = 0; j< noOfCol; j++) 

        var myNewLine=arrayOne[i].split(',');
        jArray.push( ''+header[j]+':'+myNewLine[j]+'');               
    ;
;

console.log( jArray);

这是我运行上述代码时得到的输出: output Image 在上面的代码中,我刚刚尝试在 json 脚本中显示。但如果你能做到。请提供将显示的输出转换为 .json 文件的代码。

请帮帮我,我会感谢你的。

【问题讨论】:

npmjs.com/search?q=csv%20to%20json 【参考方案1】:

如果你不想重新发明***,

给定一个这样的csv

NAME, AGE
Daffy Duck, 24
Bugs Bunny, 22

你可以这样做

var csv = require('csv-parser')
var fs = require('fs')

fs.createReadStream('some-csv-file.csv')
  .pipe(csv())
  .on('data', function (data) 
    console.log('Name: %s Age: %s', data.NAME, data.AGE)
  )

查看更多here

【讨论】:

【参考方案2】:

正如 ShanShan 提到的,您可以在实际项目中为此利用外部库,但我对您的代码进行了一些修改,如果您将其作为一种学习体验,应该可以满足您的需求。

我试图保持代码大致相同。有两个主要变化。首先,我不是用内容构造一个字符串,而是创建一个对象来存储您对每一行感兴趣的数据。因为此对象在每行级别,所以它位于处理行的外部循环中。其次,我删除了标题和值文本(引号)的第一个和最后一个字符。因为您将 CSV 解释为字符串并基于该字符串进行拆分,所以它仍然包含引号。在现实世界中,您可能希望使用正则表达式或替换函数来提取它,但我尽量保持简单,因此它使用子字符串。

以下代码:

var fs = require("fs");

var data = fs.readFileSync('test.csv');
var stringData=data.toString();

console.log(stringData);
var arrayOne= stringData.split('\r\n');

var header=arrayOne[0].split(',');
var noOfRow=arrayOne.length;
var noOfCol=header.length;

var jArray=[];

var i=0,j=0;
for (i = 1; i < noOfRow-1; i++) 

    var obj = ;
    var myNewLine=arrayOne[i].split(',');

    for (j = 0; j< noOfCol; j++) 
        var headerText = header[j].substring(1,header[j].length-1);
        var valueText = myNewLine[j].substring(1,myNewLine[j].length-1);
        obj[headerText] = valueText;
    ;
    jArray.push(obj);
;

console.log( jArray);

【讨论】:

此代码每行打印 3 行。你能修这个吗?我也在尝试解决这个问题。 糟糕,已修复。老实说,我没有注意到,因为原版也是这样做的。您需要将 jArray.push(obj) 线拉出到外部循环中,以便插入发生在每一行。 你知道如何将显示的数据保存到.json文件中吗? @Neo,当然,看这里:***.com/questions/14939289/…【参考方案3】:

这应该可行

var fs = require('fs');

var data = fs.readFileSync('test.csv');
var parsed = data.toString().split('\r\n').splice(1).map(function(d) 
    var splitted = d.split(',');
    return 
        id: parseInt(JSON.parse(splitted[0])),
        user_name: JSON.parse(splitted[1]),
        age: parseInt(JSON.parse(splitted[2]))
    ;
);

console.log(parsed);

【讨论】:

您的解决方案假定 id、user_name 和 age 是常量。我不认为这是一个安全的假设。【参考方案4】:

试试这个:

...    
var jArray=[];

var i=0,j=0;
for (i = 1; i < noOfRow-1; i++) 

    for (j = 0; j< noOfCol; j++) 

        var myNewLine=arrayOne[i].split(',');
        jArray.push(JSON.parse( ''+header[j]+':'+myNewLine[j]+''));
    ;
;



fs.writeFile('test.json', JSON.stringify(jArray), function (err) 
  if (err) return console.log(err);
  console.log('ok');
);

console.log( jArray);

【讨论】:

以上是关于如何使用 Node.js 将 CSV 文件转换为 JSON 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 将嵌套的 json 转换为 csv

将 csv 转换为 JSON,并在文档顶部添加注释 (Node.js)

node.js:将 json 数组转换为 csv

如何使用 node.js 访问 json 对象的子元素

Node js:以编程方式更改 csv 文件编码并解析为 json

Node JS:从 JSON 到 CSV 的转换