我正在编写一个函数,它应该将通用的深层嵌套JSON对象级别转换为JS或TypeScript中的CSV文件。我尝试了几个库,但不知怎的,它们不能按照我希望它展开嵌套JSON权限的方式工作。代码应解除此输入:
{
[
{
app: "app1",
device: [
"c1",
"c2",
"c3",
"c4"
]
},
{
app: "app2",
device: [
"b1",
"b2"
]
}
]
}
进入这个预期的结果:
app;device
app1;c1
app1;c2
app1;c3
app1;c4
app2;b1
app2;b2
现在我正在使用此代码,但结果与预期不符:
private ConvertToCSV(json: string, fields: string[]): string {
const Json2csvParser = require("json2csv").Parser;
let options: {};
options = { fields };
const parser = new Json2csvParser(options);
const csv = parser.parse(JSON.parse(json));
console.log(JSON.parse(json));
console.log(csv);
return csv;
}
我现在的结果如下:
"app","device"
"app1","[""c1"",""c2"",""c3"",""c4""]"
"app2","[""b1"",""b2""]"
是的,你可以这样做 - 它在与unwind function的文档中是正确的,虽然你可能需要添加一个变换器来准确地格式化你想要的方式。看一看:
const data: any = [
{
app: "app1",
device: [
"c1",
"c2",
"c3",
"c4"
]
},
{
app: "app2",
device: [
"b1",
"b2"
]
}
];
function ConvertToCSV(json: string, fields: any): string {
const Json2csvParser = require("json2csv").parse;
let options: {};
options = fields;
const csv = Json2csvParser(JSON.parse(json), options);
console.log(JSON.parse(json));
console.log(csv);
return csv;
}
ConvertToCSV(JSON.stringify(data), {fields: ['app', 'device'], unwind: 'device'});
如果这可以解决您的问题,或者如果没有,请告诉我。我对这个lib有一些经验,可能会有所帮助
我建议展平您的数据,然后只使用您拥有的csv解析器。
function flattenData(data,groupingField,flattenedField) {
let flattenedData =[];
data.forEach(d => {
d[flattenedField].forEach(sd => {
flattenedData.push({[groupingField]: d[groupingField], [flattenedField]: sd});
});
});
return flattenedData;
}
然后你将拥有一个csv解析器知道如何处理的数据结构。