import * as fs from 'fs'; import * as json2csv from 'json2csv'; interface FlattenData { [key: string]: string | number | FlattenData; } function flattenJson(data: any, parentKey = '', separator = '.'): FlattenData { const flattenedData: FlattenData = {}; for (const key in data) { if (data.hasOwnProperty(key)) { const newKey = parentKey ? `${parentKey}${separator}${key}` : key; if (typeof data[key] === 'object' && !Array.isArray(data[key])) { const nestedData = flattenJson(data[key], newKey, separator); Object.assign(flattenedData, nestedData); } else { flattenedData[newKey] = data[key]; } } } return flattenedData; } export function createCsvFromJson(jsonData: string, csvFilePath: string): void { // Load JSON data const data = JSON.parse(jsonData); // Flatten JSON data const flattenedData = flattenJson(data); // Get headers from flattened data const headers = Object.keys(flattenedData); // Convert flattened data to array of objects for json2csv const rows = [flattenedData]; // Create CSV file const csv = json2csv.parse(rows, { fields: headers }); fs.writeFileSync(csvFilePath, csv); console.log(`CSV file created at: ${csvFilePath}`); } export function createCsvFromJsonArray(jsonDataArray: any[], csvFilePath: string): void { // Flatten JSON data in array const flattenedDataArray = jsonDataArray.map((data) => flattenJson(data)); // Get headers from flattened data const headers = Array.from( new Set(flattenedDataArray.flatMap((data) => Object.keys(data))) ); // Convert flattened data to array of objects for json2csv const rows = flattenedDataArray.map((data) => headers.reduce((obj, key) => { // @ts-ignore obj[key] = data[key] || ''; return obj; }, {})); // Create CSV file const csv = json2csv.parse(rows, { fields: headers }); fs.writeFileSync(csvFilePath, csv); console.log(`CSV file created at: ${csvFilePath}`); } // Example usage // const jsonData = `{ // "name": "John", // "age": 30, // "address": { // "street": "123 Main St", // "city": "New York", // "state": "NY", // "zip": "10001" // }, // "phone": { // "home": "123-456-7890", // "work": "987-654-3210" // } // }`; // const csvFilePath = 'output.csv'; // createCsvFromJson(jsonData, csvFilePath);