csvdrop
Version:
./jsontocsv/README.md
41 lines (40 loc) • 1.59 kB
JavaScript
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);
}