Javascript 使用json2csv节点JSON到CSV文件
我刚刚学习了node.js,我想使用json2csv节点模块将JSON对象解析为CSV文件。json2csv只支持平面结构,其中字段是json根的直接子级。我找到了主题,并将json2csv的createColumnContent函数更改为读取json文件的object elemet。 但我的json文件包含数组元素,如下所示:Javascript 使用json2csv节点JSON到CSV文件,javascript,json,node.js,csv,Javascript,Json,Node.js,Csv,我刚刚学习了node.js,我想使用json2csv节点模块将JSON对象解析为CSV文件。json2csv只支持平面结构,其中字段是json根的直接子级。我找到了主题,并将json2csv的createColumnContent函数更改为读取json文件的object elemet。 但我的json文件包含数组元素,如下所示: [ { "firstName": "John", "lastName": "Smith", "age": 25, "address":
[
{
"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({
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');
});
}
);
]
我想要这样的东西
我这样称呼json2csv:
[
{
"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({
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文件中。
谢谢您自己转换数据可能比重写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);
var-xform=[];
对于(var i=0,max=data.issuelinks.length;i我刚刚在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;
从json2csv v5+开始,您可以使用模块本身提供的展平和展开来完成此操作
你可以这样使用它-
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);
}
你能举例说明你希望CSV文件的外观,包括标题吗?我添加了一个图像来显示我期望的结果