mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-04-20 06:55:06 -04:00
feat(new-tool): json to csv converter
This commit is contained in:
parent
4cbd7ac145
commit
69f0bd079f
7 changed files with 200 additions and 0 deletions
35
src/tools/json-to-csv/json-to-csv.service.ts
Normal file
35
src/tools/json-to-csv/json-to-csv.service.ts
Normal 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');
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue