Convertir des données CSV en liste d'objets JavaScript (JSON)

Concept et utilisation

La fonction arrayObjectsFromSV() permet de convertir des données CSV en liste d'objets JavaScript (JSON).

Il est possible de définir les données et les séparateurs de données.

Fonction

arrayObjectsFromSV()

Retourne une liste d'objets (JSON) à partir d'un tableau de données CSV.

Syntaxesyntaxe
arrayObjectsFromSV(donnees, options);
Paramètres
donnees(String)

Le paramètre données de la fonction arrayObjectsFromSV() définit les données CSV à convertir en liste d'objets (JSON).

options(Object)

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

Propriétés
lineDelimiter(String)

La propriété lineDelimiter du paramètre options définit la chaine de caractères servant de séparateur de colonnes dans les données.
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 la chaine de caractères servant de séparateur de lignes dans les données.
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 avant et après une valeur contenant les caractères utilisés pour les séparateurs de données.
Si cette propriété est omise, la valeur par défaut "'" sera utilisée.

Exemple de conversion de données CSV en liste d'objets

var donnees = `Entête 1;Entête 2
Ligne 1, colonne 1;Ligne 1, colonne 2
Ligne 2, colonne 2;Ligne 2, colonne 2`;

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

arrayObjectsFromSV(donnees, options);

// renvoie : [
//   { 'Entête 1': 'Ligne 1, colonne 1', 'Entête 2': 'Ligne 1, colonne 2' }
//   { 'Entête 1': 'Ligne 2, colonne 2', 'Entête 2': 'Ligne 2, colonne 2' }
// ]

Code source de la fonction

function arrayObjectsFromSV(a, b) {
  b = b || {};
  var c = b.columnDelimiter || ',',
      d = b.columnQuote || "'",
      e = a.split(b.lineDelimiter || '\n'),
      f = e[0].split(c),
      g = f.length,
      h = [];
  e.slice(1).map(function(i) {
    var j = false,
        k = [],
        l = {},
        m = 0;
    i.split('').forEach(function (n) {
      if (n === d) {
        j = !j;
      } else {
        if (n === c && !j) {
          l[f[m]] = k.join('');
          k = [];
          m++;
          if (m === g) {
            m = 0;
          }
        } else {
          k.push(n);
        }
      }
    });
    l[f[g-1]] = k.join('');
    h.push(l);
  });
  return h;
}
^