Sérialisation d'objets en JavaScript (Node.js) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Sérialisation d'objets en JavaScript (Node.js) : de JSON aux formats binaires



La sérialisation est le processus de conversion d'une structure de données complexe (objet, tableau, Map, Set) en un format pouvant être sauvegardé dans un fichier, transmis sur un réseau ou envoyé à un autre processus. En Node.js, la sérialisation est utilisée partout : des API REST à la communication inter-processus et à la mise en cache. Dans cet article, nous allons passer en revue les principaux outils et bibliothèques de sérialisation dans l'environnement Node.js, leurs forces et leurs faiblesses.



1. JSON intégré : le standard de facto



La méthode la plus simple et la plus populaire consiste à utiliser l'objet global JSON avec les méthodes JSON.stringify() et JSON.parse(). Il est pris en charge nativement dans Node.js sans installation de paquets supplémentaires.



Exemple de sérialisation de base :

const user = {  name: 'Alexeï',  age: 30,  roles: ['admin', 'editor'],  metadata: null};

// Sérialisation en chaîneconst jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"Alexeï","age":30,"roles":["admin","editor"],"metadata":null}

// Désérialisation en objetconst parsedUser = JSON.parse(jsonString);console.log(parsedUser.name); // Alexeï


Limitations de JSON :

  • Ne prend pas en charge les fonctions — les méthodes de l'objet seront supprimées.
  • Ne prend pas en charge les références circulaires — provoquera une erreur Converting circular structure to JSON.
  • Ignore undefined, Symbol, BigInt (ce dernier provoque une erreur).
  • Convertit Date en chaîne — l'objet Date n'est pas restauré lors de la désérialisation.


Sérialisation personnalisée avec replacer :

const data = {  name: 'Test',  date: new Date(),  secret: 'ne pas sauvegarder',  nested: { value: 42 }};

const json = JSON.stringify(data, (key, value) => { if (key === 'secret') return undefined; // exclure le champ if (value instanceof Date) return value.toISOString(); // formater la date explicitement return value;}, 2); // formatage avec indentation

console.log(json);


2. Sérialisation via Buffer : pour les données binaires



Lorsque vous devez transmettre des données binaires (images, fichiers, protobuf), la classe Buffer est utilisée. En Node.js, Buffer permet de convertir des chaînes et des objets au format binaire et vice versa.



Exemple avec Buffer et JSON :

const obj = { message: 'Bonjour le monde !' };

// Sérialisation en JSON, puis en Bufferconst buffer = Buffer.from(JSON.stringify(obj), 'utf-8');console.log(buffer); // <Buffer 7b 22 6d 65 73 73 61 67 65 22 3a 22 d0 9f ...

// Retourconst restored = JSON.parse(buffer.toString('utf-8'));console.log(restored.message); // Bonjour le monde !


Sérialisation directe de nombres en Buffer :

const buf = Buffer.alloc(8);buf.writeInt32LE(255, 0); // écriture d'un entier 32 bitsbuf.writeFloatLE(3.14, 4); // écriture d'un float

console.log(buf); // représentation binaire// Lectureconsole.log(buf.readInt32LE(0)); // 255console.log(buf.readFloatLE(4)); // 3.140000104904175


3. Bibliothèque flatted : solution pour les références circulaires



Si votre objet contient des références circulaires (par exemple, un arbre DOM ou un graphe), le JSON standard ne pourra pas les gérer. La bibliothèque flatted (auteur — Andrea Giammarchi) résout ce problème.



Installation et exemple :

npm install flatted


const { stringify, parse } = require('flatted');

const circularObj = { name: 'Cycle' };circularObj.self = circularObj; // référence circulaire

const json = stringify(circularObj);console.log(json);// {"name":"Cycle","self":"$1"}

const restored = parse(json);console.log(restored.name); // Cycleconsole.log(restored.self === restored); // true


4. Protocol Buffers (protobuf)

Recommendations