UNPKG

csv-tools

Version:

Convert CSV to JSON and JSON to CSV.

57 lines (56 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.jsonArrayToCsv = void 0; function jsonArrayToCsv(jsonArray, delimiter) { if (delimiter === void 0) { delimiter = ','; } if (!jsonArray || jsonArray.length <= 0) throw new Error("The array must contain at least one JSON object"); var data = []; var headers = []; for (var i in jsonArray) { var jsonObject = jsonArray[i]; data[i] = []; for (var prop in jsonObject) { var headerArray = []; propToHeader(jsonObject[prop], prop, headerArray, data[i]); for (var j in headerArray) { var header = headerArray[j]; if (headers.indexOf(header) == -1) headers.push(header); } } } var result = headers.map(function (item) { return "\"" + item + "\""; }).join(delimiter) + "\n"; for (var z = 0; z < data.length; z++) { var row = ""; for (var k = 0; k < headers.length; k++) { var key = headers[k]; var value = data[z][key]; if (k > 0) row += delimiter; if (value !== undefined && value !== null) { if (typeof value == "string") { value = value.replace(/"/g, '""'); value = "\"" + value + "\""; } row += value; } } result += row; if (z < data.length - 1) result += "\n"; } return result; } exports.jsonArrayToCsv = jsonArrayToCsv; function propToHeader(jsonObject, parents, headerArray, dataArray) { if (typeof jsonObject !== "object") { headerArray.push(parents); dataArray[parents] = jsonObject; } else { for (var p in jsonObject) { propToHeader(jsonObject[p], parents + "." + p, headerArray, dataArray); } } }