Lecture de fichier JSON avec Node.JS

Cet article présente les différentes possibilités pour lire un fichier JSON avec Node.JS.

L’ensemble du code est disponible sur mon github : github.com/rya-sge/AD-ressources - nodeJS/json

Avec le module expérimental

Depuis Node v8.5.0, Il est possible d’importer un fichier JSON avec la directive importpour ensuite l’utiliser dans votre application, par exemple pour créer une map à partir de son contenu.

Cela permet de simplifier la lecture des fichiers json.

Les sources disponibles sont les suivantes :

Lancement

La fonctionnalité est encore au stade expérimentale, il faut lancer node js avec le flag --experimental-json-modules

  • En ligne de commande :
node --experimental-modules --experimental-json-modules app.js
  • Avec npm start

II faut ajouter la commande dans la partie scripts du fichier package.json .

Ensuite, il suffira d’exécuter la commande npm start pour que node soit lancé avec les bons flags.

"scripts": {
    "start": "node --experimental-modules --experimental-json-modules app.js"
  },

Exemple de code

import ANIMES_LIST from "./anime.json"
mapAnimes = ANIMES_LIST.reduce((map, anime) => map.set(anime.id, anime), new Map())
console.log("**Converto to map**")
console.log(mapAnimes)

Erreur possible

Si vous ne mettez pas le flag experimental, vous aurez une triggerUncaughtExceptionexception qui sera lancée car l’extension du fichier ne sera pas reconnue

internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(                              ^
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json" for test.json

Avec le module fs

1) Synchrone

Avec la fonction readIleSync, la lecture du fichier sera synchrone (bloquant)

let rawdata = fs.readFileSync(FILE_PATH);
let persons = JSON.parse(rawdata)
let mapPersons = persons.reduce((map, person) => map.set(person.id, person), new Map())

Source principale : stackabuse.com - Reading and Writing JSON Files with Node.js

2) Asynchrone

En utilisant readFile, la lecture sera asynchrone (non bloquant)

async function loadJson() {
    return fs.readFile(FILE_PATH, "utf8", (err, response) => {
        if (err) {
            console.error(err);
            return;
        }
        // your JSON file content as object
        let data = JSON.parse(response);
        console.log("****Read JSON with fs & ReadFile****")
        mapPersons = data.reduce((map, person) => map.set(person.id, person), new Map())
        console.log(mapPersons)
        return mapPersons;
    });

}

Source principale : sebhastian.com - How to read JSON file using NodeJS

Source

Global

Documentation officiel Node.js v17.3.0 : https://nodejs.org/api/esm.html

Cours de Technologie Web (TWEB) enseigné à l’HEIG-VD en 2021-2022

Module expérimental

Module fs

You might also enjoy