1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * @author n1474335 [n1474335@gmail.com]
- * @copyright Crown Copyright 2018
- * @license Apache-2.0
- */
- import Operation from "../Operation.mjs";
- import OperationError from "../errors/OperationError.mjs";
- import Utils from "../Utils.mjs";
- /**
- * CSV to JSON operation
- */
- class CSVToJSON extends Operation {
- /**
- * CSVToJSON constructor
- */
- constructor() {
- super();
- this.name = "CSV to JSON";
- this.module = "Default";
- this.description = "Converts a CSV file to JSON format.";
- this.infoURL = "https://wikipedia.org/wiki/Comma-separated_values";
- this.inputType = "string";
- this.outputType = "JSON";
- this.args = [
- {
- name: "Cell delimiters",
- type: "binaryShortString",
- value: ","
- },
- {
- name: "Row delimiters",
- type: "binaryShortString",
- value: "\\r\\n"
- },
- {
- name: "Format",
- type: "option",
- value: ["Array of dictionaries", "Array of arrays"]
- }
- ];
- }
- /**
- * @param {string} input
- * @param {Object[]} args
- * @returns {JSON}
- */
- run(input, args) {
- const [cellDelims, rowDelims, format] = args;
- let json, header;
- try {
- json = Utils.parseCSV(input, cellDelims.split(""), rowDelims.split(""));
- } catch (err) {
- throw new OperationError("Unable to parse CSV: " + err);
- }
- switch (format) {
- case "Array of dictionaries":
- header = json[0];
- return json.slice(1).map(row => {
- const obj = {};
- header.forEach((h, i) => {
- obj[h] = row[i];
- });
- return obj;
- });
- case "Array of arrays":
- default:
- return json;
- }
- }
- }
- export default CSVToJSON;
|