UNPKG

csvdrop

Version:

./jsontocsv/README.md

41 lines (40 loc) 1.59 kB
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; export function jsontocsv(data, filename) { if (filename === void 0) { filename = "data.csv"; } if (!Array.isArray(data) || data.length === 0 || typeof data[0] !== "object" || Array.isArray(data[0])) { throw new Error("Data must be a non-empty array of objects."); } var headers = Object.keys(data[0]); var csvRows = __spreadArray([ headers.join(",") ], data.map(function (row) { return headers .map(function (field) { var value = row[field]; // Escape quotes and wrap value in double quotes return "\"".concat(String(value !== null && value !== void 0 ? value : "").replace(/"/g, '""'), "\""); }) .join(","); }), true); var csvContent = csvRows.join("\n"); var blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" }); var url = URL.createObjectURL(blob); var link = document.createElement("a"); link.href = url; link.setAttribute("download", filename.endsWith(".csv") ? filename : filename + ".csv"); document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); }