javascript - Cara umum mengonversi Json ke CSV untuk array bersarang dalam yang bersifat umum
Saya sedang memprogram sebuah fungsi, yang seharusnya mengubah tingkat objek JSON bersarang secara umum menjadi file CSV di JS atau TypeScript. Saya telah mencoba beberapa pustaka tetapi entah bagaimana mereka tidak bekerja seperti yang saya inginkan untuk membuka JSON bersarang dengan benar. Kode ini seharusnya membuka input ini:
{
[
{
app: "app1",
device: [
"c1",
"c2",
"c3",
"c4"
]
},
{
app: "app2",
device: [
"b1",
"b2"
]
}
]
}
Ke dalam hasil yang diharapkan ini:
app;device
app1;c1
app1;c2
app1;c3
app1;c4
app2;b1
app2;b2
Saat ini saya menggunakan kode ini tetapi hasilnya tidak seperti yang diharapkan:
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;
}
Hasil saya saat ini terlihat seperti ini:
"app","device"
"app1","[""c1"",""c2"",""c3"",""c4""]"
"app2","[""b1"",""b2""]"
Jawaban #1
Ya, Anda bisa melakukan ini -- ini ada di dokumen dengan fungsi unwind meskipun Anda mungkin perlu menambahkan transformer untuk memformatnya persis seperti yang Anda inginkan. Lihatlah:
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'});
Beri tahu saya jika ini menyelesaikan masalah Anda, atau jika tidak. Saya memiliki pengalaman dengan pustaka ini dan mungkin bisa membantu
Jawaban #2
Saya sarankan untuk meratakan data Anda terlebih dahulu dan kemudian hanya menggunakan parser csv yang Anda miliki.
function flattenData(data,groupingField,flattenedField) {
let flattenedData =[];
data.forEach(d => {
d[flattenedField].forEach(sd => {
flattenedData.push({[groupingField]: d[groupingField], [flattenedField]: sd});
});
});
return flattenedData;
}
Maka Anda akan memiliki struktur data yang diketahui oleh parser CSV Anda cara menanganinya.
