【问题标题】:JSON to CSV file using json2csv nodejs使用 json2csv nodejs 的 JSON 到 CSV 文件
【发布时间】:2015-03-03 03:28:42
【问题描述】:

我新学习了 node.js,我想使用 json2csv 节点模块将 JSON 对象解析为 CSV 文件。 json2csv 仅支持平面结构,其中字段是 json 根的直接子级。我找到了how-to-parse-json-object-to-csv-file-using-json2csv-nodejs-module 主题并将json2csv 的createColumnContent 函数更改为读取我的json 文件的对象元素。 但我的 json 文件有数组元素,是这样的:

[
{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
},
{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}

]

我想要这样的东西

我这样调用 json2csv:

json2csv({
        data: body.issues, 
        fields: ['firstName','lastname','age','address.city', 'phoneNumber[?].type', 'phoneNumber[?].number']
    }, 
    function(err, csv) {
        if (err) console.log(err);
        fs.writeFile('sample.csv', csv, function(err) {
            if (err) throw err;
            console.log('file saved');
        });  
    }
);

如何读取数组并添加到我的 csv 文件。 谢谢

【问题讨论】:

  • 您能否举例说明您希望 CSV 文件的外观,包括标题?
  • 我添加了一张图片来显示我期望的结果

标签: javascript json node.js csv


【解决方案1】:

从 json2csv v5+ 开始,您可以使用模块本身提供的 flatten 和 unwind 来执行此操作。

你可以这样使用它-

const {
  Parser,
  transforms: { flatten, unwind }
} = require("json2csv");

try {
  const parser = new Parser({
    fields: ["firstColumn", "b.secondColumn", "cars.0.brand", "cars.1.brand"],
    transforms: [flatten({ arrays: true }), unwind({ paths: ["cars"] })]
  });
  const csv = parser.parse({
    firstColumn: "first data",
    b: {
      secondColumn: "second data"
    },
    cars: [{ brand: "AUDI" }, { brand: "TOYOTA" }]
  });
  console.log(csv);
//   OUTPUT:
//  "firstColumn","b.secondColumn","cars.0.brand","cars.1.brand"
//  "first data","second data","AUDI","TOYOTA"
} catch (err) {
  console.log(err);
}

【讨论】:

    【解决方案2】:

    我刚刚发布了一个在 Node.js 中简化此过程的模块

    var jsonexport = require('jsonexport');
    
    var contacts = [{
       name: 'Bob',
       lastname: 'Smith',
       family: {
           name: 'Peter',
           type: 'Father'
       }
    },{
       name: 'James',
       lastname: 'David',
       family:{
           name: 'Julie',
           type: 'Mother'
       }
    },{
       name: 'Robert',
       lastname: 'Miller',
       family: null,
       location: [1231,3214,4214]
    },{
       name: 'David',
       lastname: 'Martin',
       nickname: 'dmartin'
    }];
    
    jsonexport(contacts,function(err, csv){
        if(err) return console.log(err);
        console.log(csv);
    });
    

    输出:

    lastname;name;family.type;family.name;nickname;location
    Smith;Bob;Father;Peter;;
    David;James;Mother;Julie;;
    Miller;Robert;;;;1231,3214,4214
    Martin;David;;;dmartin;
    

    https://www.npmjs.com/package/jsonexport

    【讨论】:

      【解决方案3】:

      您自己转换数据可能比覆盖 json2csv 包的一部分更好。然后您可以将平面数据结构传递给 json2csv 进行格式化。

          var xform = [];
          for (var i=0, max=data.issuelinks.length; i<max; i++ ) {
                  xform[xform.length] = { id:data.id, progress:data.progress.percent, issuelinkid:data.issuelinks[i].id, issuelinktypeid:data.issuelinks[i].type.id } 
          } 
          console.log(xform);
      

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2017-04-05
        • 2017-05-25
        • 1970-01-01
        • 2018-07-12
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        相关资源
        最近更新 更多