使用 json2csv nodejs 的 JSON 到 CSV 文件
Posted
技术标签:
【中文标题】使用 json2csv nodejs 的 JSON 到 CSV 文件【英文标题】:JSON to CSV file using json2csv nodejs 【发布时间】: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 文件的外观,包括标题? 我添加了一张图片来显示我期望的结果 【参考方案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);
【讨论】:
以上是关于使用 json2csv nodejs 的 JSON 到 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在nodejs json2csv中的现有csv文件中追加新行?