Javascript 如何将json数组转换为具有特定属性的CSV数据

Javascript 如何将json数组转换为具有特定属性的CSV数据,javascript,node.js,csv,npm,Javascript,Node.js,Csv,Npm,我正在开发节点Javascript应用程序。我有一个数组,我想把这个数组转换成特定属性的CSV数据 var data = [ { "Name":"nom1", "Division":"first", "Cities":['city1','city2'] }, { "Name":"nom2", "Division":"first", "Cities":['city4','city5'] } ] 我想把这个数组转换成 Name,

我正在开发节点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);
}

我的要求是转换数据,我愿意使用任何新技术或其他npm包。有人能建议我怎么做吗?

问题是因为您正在循环它,它会多次创建标头。

问题是因为您正在循环它,它会多次创建标头。

删除for循环并传递整个数据数组解决了此问题

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


删除for循环并传递整个数据数组解决了这个问题

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


这是什么?我的车?。我认为,由于您正在循环不断添加的标题,因此您需要避免该部分。谢谢@DILEEPTHOMAS,这是一个很好的捕获,我删除了循环,我已将其添加为答案,因为没有要添加的代码块。只是语句很好,请随意编辑。如果它对你有用,请接受并投票,这样对其他人会有帮助。还可以在答案中添加你删除的代码片段,这样会有帮助:)happy coding此处不涉及JSON
myData
是一个对象数组。这是什么myCars[i]?。我认为,由于您正在循环不断添加的标题,因此您需要避免该部分。谢谢@DILEEPTHOMAS,这是一个很好的捕获,我删除了循环,我已将其添加为答案,因为没有要添加的代码块。只是语句很好,请随意编辑。如果它对你有用,请接受并投票,这样对其他人会有帮助。还可以在答案中添加你删除的代码片段,这样会有帮助:)happy coding此处不涉及JSON
myData
是一个对象数组。