feat(new-tool): json to csv converter

This commit is contained in:
Corentin Thomasset 2023-06-18 17:57:18 +02:00
parent 4cbd7ac145
commit 69f0bd079f
No known key found for this signature in database
GPG key ID: DBD997E935996158
7 changed files with 200 additions and 0 deletions

View file

@ -0,0 +1,35 @@
export { getHeaders, convertArrayToCsv };
function getHeaders({ array }: { array: Record<string, unknown>[] }): string[] {
const headers = new Set<string>();
array.forEach(item => Object.keys(item).forEach(key => headers.add(key)));
return Array.from(headers);
}
function serializeValue(value: unknown): string {
if (value === null) {
return 'null';
}
if (value === undefined) {
return '';
}
const valueAsString = String(value).replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/"/g, '\\"');
if (valueAsString.includes(',')) {
return `"${valueAsString}"`;
}
return valueAsString;
}
function convertArrayToCsv({ array }: { array: Record<string, unknown>[] }): string {
const headers = getHeaders({ array });
const rows = array.map(item => headers.map(header => serializeValue(item[header])));
return [headers.join(','), ...rows].join('\n');
}