Source: natural-language-classifier/json-training-to-csv.js

/**
 * Copyright 2015 IBM Corp. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

'use strict';

const stringify = require('csv-stringify');

function toCSVArray(data) {
  if (data.text && data.classes && data.classes.length > 0) {
    return [data.text].concat(data.classes);
  } else {
    throw Error('Invalid training_data format, it needs to be: ' + '[{ text: "my-text", classes:["my-class1", "my-class2",...]}, {}, ...]');
  }
}

/**
 * IF traning is json, convert it to csv.
 * @param  {Object[]} jsonData the training_data as a json array
 * @param  {Function} cb the error first callback
 */
module.exports = function toCSV(training, cb) {
  if (Array.isArray(training)) {
    try {
      stringify(training.map(toCSVArray), cb);
    } catch (e) {
      cb(e);
    }
  } else {
    cb(null, training);
  }
};