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

时间:2016-05-07 08:32:01

标签: javascript json node.js csv

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文件。

请帮助我,我将感激你。

4 个答案:

答案 0 :(得分:1)

正如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);

答案 1 :(得分:1)

试试这个:

...    
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);

答案 2 :(得分:1)

这应该有效

def quadratic_combinations(df):
    rng = range(len(df.columns))
    return pd.concat([df.iloc[:, i:].mul(df.iloc[:, i], axis=0) for i in rng],
                     axis=1, keys=df.columns)

df_quad = quadratic_combinations(df)

print df_quad

   C1              C2          C3      C4
   C1  C2  C3  C4  C2  C3  C4  C3  C4  C4
0  64   0  40  48   0   0   0  25  30  36
1  16  20  12  20  25  15  25   9  15  25

答案 3 :(得分:0)

如果你不想重新发明轮子,

给出一个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