Transformer un fichier CSV en JSON avec NodeJS
Les fichiers CSV représentent un format de donnée très courant sur internet. Dans cet article, nous allons lire et convertir les données d'un fichier en JSON avec Node.JS.
Transformer un fichier CSV en JSON avec NodeJS
Pré-requis
Configurer notre projet NodeJS
Nous allons générer une nouvelle application node.js afin de pouvoir installer la librairie csv-parser. Pour ce faire, ouvrez votre terminal dans un dossier vide, et entrez la commande suivante. Cela va créer un fichier package.json.
Il faut également modifier le fichier package.json et y copier la ligne "type":"module"
.
Voici à quoi ressemble un fichier bien configuré :
Nous avons terminé la configuration. Nous pouvons maintenant créer un nouveau fichier index.js qui va contenir le code source permettant de transformer nos données CSV en JSON. Il est recommendé de l'ouvrir avec votre éditeur de code préféré.
Première ligne de code
Pour pouvoir lire notre fichier CSV, il faut d'abord le télécharger ! Le site Mockaroo permet de générer un fichier MOCK_DATA.csv qu'on va glisser-déposer dans le dossier projet.
Nous allons ensuite écrire une première fonction afin de détecter la présence du fichier CSV grâce à la librairie native de Node, fs. La fonction readCsvFile affichera hello world dans notre terminal et importera la librairie fs. Nous appelons ensuite la fonction pour l'exécuter.
Après avoir sauvegardé notre fichier, nous allons exécuter le code avec la commande node index.js. Nous devrions voir le message hello world dans notre terminal. Cela signifie que le projet est bien configuré !
Lecture d'un fichier NodeJS avec fs
Nous pouvons maintenant charger le fichier CSV au sein de notre dossier. Il suffit de modifier notre fonction en rajoutant les instructions suivantes :
- La première instruction spécifie le chemin relatif vers notre fichier CSV, ici ./MOCK_DATA.csv
- La seconde instruction permet d'ouvrir le fichier avec la méthode fs.readFileSync pour s'assurer que le fichier existe.
- Si le fichier n'existe pas, nous déclenchons une erreur avec le message Le fichier MOCK_DATA.csv n'existe pas.
- Nous sauvegardons notre fichier pour l'exécuter à nouveau avec notre terminal avec la commande
node index.js
. - L'erreur n'a pas été déclenchée, cela signifie que notre fichier a été lu par fs. Nous pouvons maintenant passer à la conversion.
Conversion CSV en JSON avec csv-parser
Nous avons besoin installer la librairie csv-parser pour pouvoir l'utiliser.
Une fois installée, nous allons importer la librairie à l'intérieur de notre fichier. Notre fichier contient maintenant ces instructions :
La documentation officielle de csv-parser nous aide avec l'instruction suivante que nous allons rajouter dans notre code :
_10fs.createReadStream(filePath)_10 .pipe(parser())_10 .on('data', (row) => results.push(row))_10 .on('end', () => {_10 console.log(results);_10 });
Prenons le temps d'analyser ces lignes.
- Nous appelons d'abord la méthode fs.createReadStream qui accepte en paramètre notre variable filePath (chemin relatif vers le fichier CSV).
- Nous appelons ensuite la fonction chaînée pipe qui accepte en paramètre une destination (un flux de données, dans notre cas la méthode parser que nous avons précédemment importé.
- Nous appelons finalement les fonctions chaînées .on qui prennent en premier paramètre un évènement (lire un fichier CSV déclenche plusieurs types d'évènements : error en cas d'erreur, data en cas de lecture de ligne, end à la fin de traitement du fichier).
- Chaque évènement est suivi d'une fonction de rappel (callback).
- Notre évènement data va ajouter chaque ligne dans un tableau d'objets nommé results (il ne faut pas oublier de le déclarer au dessus de l'instruction)
- Notre évènement end qui va afficher sur notre terminal notre tableau de lignes traitées à la fin du traitement.
Code final
Nous rajoutons la commande trouvée sur la documentation de csv-parser, modifiée pour répondre à nos critères.
Nous avons déclaré une nouvelle variable results qui va stocker chaque ligne transformée en JSON.
Nous pouvons sauvegarder notre fichier, et l'exécuter dans notre invité de commande pour vérifier son fonctionnement
Le terminal affiche un tableau d'objet, correspondant à notre fichier CSV. Chaque clé de notre objet est nommée correspondant au titre (l'en-tête en première ligne) du fichier.
Nous avons réussi la conversion de notre fichier CSV en JSON.
J'espère que ce guide vous a été utile. Merci aux contributeurs du projet qui proposent également d'autres librairies, permettant de manipuler davantage de fichiers CSV.