如何使用 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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
将 csv 转换为 JSON,并在文档顶部添加注释 (Node.js)