Travailler avec JSON dans Node.js : des bases aux techniques avancées
JSON (JavaScript Object Notation) est un format léger d'échange de données qui est devenu le standard de facto pour les API web et les fichiers de configuration. Dans Node.js, le travail avec JSON est intégré au niveau du noyau, ce qui rend son traitement rapide et pratique. Dans cet article, nous aborderons tous les aspects du travail avec JSON : de l'analyse de base au traitement de gros fichiers à l'aide de flux.
Les bases : JSON.parse() et JSON.stringify()
Deux méthodes globales — JSON.parse() et JSON.stringify() — sont le fondement de tout travail avec JSON en JavaScript.
JSON.parse() — conversion d'une chaîne en objet
La méthode JSON.parse() prend une chaîne au format JSON et retourne l'objet JavaScript correspondant. Si la chaîne contient une erreur de syntaxe, une exception SyntaxError sera levée.
const jsonString = '{"name": "Анна", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);
console.log(user.name); // "Анна"console.log(user.age); // 30Le deuxième paramètre optionnel est une fonction reviver qui permet de transformer les valeurs pendant l'analyse :
const jsonString = '{"date": "2024-01-15T10:30:00Z", "count": "42"}';const obj = JSON.parse(jsonString, (key, value) => { if (key === 'date') return new Date(value); if (key === 'count') return parseInt(value, 10); return value;});
console.log(obj.date instanceof Date); // trueconsole.log(typeof obj.count); // "number"JSON.stringify() — conversion d'un objet en chaîne
La méthode JSON.stringify() fait l'inverse — transforme un objet JavaScript en chaîne JSON. Elle accepte trois paramètres : la valeur, une fonction de remplacement (ou un tableau de clés) et le nombre d'espaces pour le formatage.
const user = { name: "Иван", age: 25, roles: ["admin", "editor"], metadata: null};
// Utilisation de baseconst json = JSON.stringify(user);console.log(json);// {"name":"Иван","age":25,"roles":["admin","editor"],"metadata":null}
// Avec formatageconst prettyJson = JSON.stringify(user, null, 2);console.log(prettyJson);/*{ "name": "Иван", "age": 25, "roles": ["admin", "editor"], "metadata": null}*/La fonction de remplacement permet de filtrer ou de transformer les valeurs :
const user = { name: "Петр", password: "secret123", age: 28 };
const safeJson = JSON.stringify(user, (key, value) => { if (key === 'password') return undefined; // supprime le mot de passe return value;});
console.log(safeJson); // {"name":"Петр","age":28}Lecture et écriture de fichiers JSON dans Node.js
Dans les projets réels, les données JSON sont souvent stockées dans des fichiers. Node.js fournit le module fs (file system) pour travailler avec le système de fichiers.
Lecture de JSON depuis un fichier
const fs = require('fs');
// Lecture synchronetry { const data = fs.readFileSync('config.json', 'utf8'); const config = JSON.parse(data); console.log(config.port); // 3000} catch (err) { console.error('Erreur de lecture du fichier :', err.message);}
// Lecture asynchrone (recommandée)fs.readFile('config.json', 'utf8', (err, data) => { if (err) { console.error('Erreur :', err); return; } const config = JSON.parse(data); console.log(config);});Écriture de JSON dans un fichier
const fs = require('fs');
const settings = { theme: "dark", language: "ru", notifications: true};
// Écriture avec formatagefs.writeFileSync('settings.json', JSON.stringify(settings, null, 2), 'utf8');console.log('Fichier settings.json créé');
// Écriture asynchronefs.writeFile('settings.json', JSON.stringify(settings), (err) => { if (err) throw err;