我正在研究节点Javascript应用程序。我有一个数组,我想将此数组转换为具有特定属性的CSV数据。
var data =
[
{
"Name":"nom1",
"Division":"first",
"Cities":['city1','city2']
},
{
"Name":"nom2",
"Division":"first",
"Cities":['city4','city5']
}
]
我希望将此数组转换为,
Name,Cities
nom1,city1
nom1,city2
nom2,city3
nom2,city4
我尝试使用npm包json2csv,它在每一行上重复标题
script.js
const { Parser, transforms: { unwind } } = require('json2csv');
const fs = require('fs');
const path = require('path');
let outputFile = path.resolve(__dirname + path.sep + './output.csv');
const myData = [
{
"Name":"nom1",
"Division":"first",
"Cities":['city1','city2']
},
{
"Name":"nom2",
"Division":"first",
"Cities":['city4','city5']
}
]
const fields = ['Name','Cities'];
const transforms = [unwind({ paths: ['Cities'] })];
for ( i=0; i < 2; i++ ) {
const json2csvParser = new Parser({ fields, transforms });
const csv = json2csvParser.parse(myCars[i]);
fs.appendFileSync(outputFile,csv);
}
但是这会创建表单数据,而不是我需要的数据
"Name","Cities"
"nom1","city1"
"nom1","city2""Name","Cities"
"nom2","city4"
"nom2","city5"
我的要求是转换数据,我愿意使用任何新技术或其他npm软件包。谁能建议我该怎么办?
问题是因为您正在遍历它,它将多次创建标头。
删除循环并传递整个数据数组解决了此问题
const { Parser, transforms: { unwind } } = require('json2csv');
const fs = require('fs');
const path = require('path');
let outputFile = path.resolve(__dirname + path.sep + './output.csv');
const myData = [
{
"Name":"nom1",
"Division":"first",
"Cities":['city1','city2']
},
{
"Name":"nom2",
"Division":"first",
"Cities":['city4','city5']
}
]
const fields = ['Name','Cities'];
const transforms = [unwind({ paths: ['Cities'] })];
const json2csvParser = new Parser({ fields, transforms });
const csv = json2csvParser.parse(myCars);
fs.appendFileSync(outputFile,csv);