Convertir une liste d'objets (JSON) en CSV avec JavaScript

Concept et utilisation

La fonction arrayObjectsToSV() permet de convertir une liste d'objets (JSON) au format CSV.

Il est possible de définir le jeu de données ainsi que les séparateurs de données.

Fonction

arrayObjectsToSV()

Retourne des données en format CSV à partir d'un tableau de données JSON.

Syntaxe
arrayObjectsToSV(donnees, options);
Paramètres
donnees(JSON)

Le paramètre donnees de la fonction arrayObjectsToSV() définit les données JSON à convertir en format CSV.

Le format est défini avec une liste d'objets composés de clés pour les données entêtes et de valeurs pour les données en lignes.

options(Object)

Le paramètre options de la fonction arrayObjectsToSV() définit les séparateurs de données.

Propriétés
lineDelimiter(String)

La propriété lineDelimiter du paramètre options définit les séparateur de lignes.
Si cette propriété est omise, la valeur par défaut "\n" sera utilisée.

columnDelimiter(String

La propriété columnDelimiter du paramètre options définit les séparateur de colonnes.
Si cette propriété est omise, la valeur par défaut ";" sera utilisée.

columnQuote(String)

La propriété columnQuote du paramètre options définit les caractères de citation à ajouter avant et après une valeur contenant les caractères utilisés pour les séparateurs.
Si cette propriété est omise, la valeur par défaut "'" sera utilisée.

Exemple de conversion de données JSON en format CSV

var donnees = [
  {
    "Entête 1": "Valeur 1",
    "Entête 2": "Valeur 2"
  },
  {
    "Entête 1": "Valeur 3",
    "Entête 2": "Valeur 4"
  }
];

var options = {
  lineDelimiter: '\n',
  columnDelimiter: ';',
  columnQuote: "'"
};

arrayObjectsToSV(donnees, options);

// renvoie : "Entête 1;Entête 2
//            Valeur 1;Valeur 2
//            Valeur 3;Valeur 4"

Code source de la fonction

function arrayObjectsToSV(a, b) {
  b = b || {};
  var c = a.length,
      d = b.columnDelimiter || ';',
      e = b.lineDelimiter || 'n',
      f = b.columnQuote || "'",
      g = [];
      for (var i = 0; i < c; i++) {
        for (var k in a[i]) {
          if (g.indexOf(k) === -1) {
            g.push(k);
          }
        }
      }
      h = g.length,
      i = [],
      j = function(v) {
        return v ? (v.indexOf(d) > -1 || v.indexOf(e) > -1) ? f + v + f : v : '';
      };
  for (var k = 0; k < h; k++) {
    i[k] = j(g[k]);
  }
  var s = i.join(d) + e;
  for (var k = 0; k < c; k++) {
    var r = a[k];
    for (var l = 0; l < h; l++) {
      if (l > 0) {
        s += d;
      }
      s += j(r[g[l]]);
    }
    if (k < c) {
      s += e;
    }
  }
  return s;
}
^