Objekt-Serialisierung in JavaScript (Node.js): Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Objekt-Serialisierung in JavaScript (Node.js): Von JSON bis zu binären Formaten



Serialisierung ist der Prozess der Umwandlung einer komplexen Datenstruktur (Objekt, Array, Map, Set) in ein Format, das in einer Datei gespeichert, über ein Netzwerk übertragen oder an einen anderen Prozess gesendet werden kann. In Node.js wird Serialisierung überall eingesetzt: von REST-APIs bis hin zur prozessübergreifenden Kommunikation und Caching. In diesem Artikel werden wir die wichtigsten Werkzeuge und Bibliotheken für die Serialisierung in der Node.js-Umgebung sowie ihre Stärken und Schwächen untersuchen.



1. Integriertes JSON: Der De-facto-Standard



Der einfachste und beliebteste Weg ist die Verwendung des globalen Objekts JSON mit den Methoden JSON.stringify() und JSON.parse(). Es wird nativ in Node.js ohne Installation zusätzlicher Pakete unterstützt.



Beispiel für eine grundlegende Serialisierung:

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

// Serialisierung in einen Stringconst jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"Alexej","age":30,"roles":["admin","editor"],"metadata":null}

// Deserialisierung zurück in ein Objektconst parsedUser = JSON.parse(jsonString);console.log(parsedUser.name); // Alexej


Einschränkungen von JSON:

  • Unterstützt keine Funktionen — Methoden des Objekts werden entfernt.
  • Unterstützt keine zirkulären Referenzen — führt zu einem Fehler Converting circular structure to JSON.
  • Ignoriert undefined, Symbol, BigInt (letzteres führt zu einem Fehler).
  • Wandelt Date in einen String um — bei der Deserialisierung wird das Date-Objekt nicht wiederhergestellt.


Benutzerdefinierte Serialisierung mit replacer:

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

const json = JSON.stringify(data, (key, value) => { if (key === 'secret') return undefined; // Feld ausschließen if (value instanceof Date) return value.toISOString(); // Datum explizit formatieren return value;}, 2); // Formatierung mit Einrückungen

console.log(json);


2. Serialisierung mit Buffer: Für binäre Daten



Wenn binäre Daten (Bilder, Dateien, protobuf) übertragen werden müssen, wird die Klasse Buffer verwendet. In Node.js ermöglicht Buffer die Umwandlung von Strings und Objekten in ein binäres Format und zurück.



Beispiel mit Buffer und JSON:

const obj = { message: 'Hallo, Welt!' };

// In JSON serialisieren, dann in 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 ...

// Zurückconst restored = JSON.parse(buffer.toString('utf-8'));console.log(restored.message); // Hallo, Welt!


Direkte Serialisierung von Zahlen in Buffer:

const buf = Buffer.alloc(8);buf.writeInt32LE(255, 0); // 32-Bit-Ganzzahl schreibenbuf.writeFloatLE(3.14, 4); // Float schreiben

console.log(buf); // binäre Darstellung// Lesenconsole.log(buf.readInt32LE(0)); // 255console.log(buf.readFloatLE(4)); // 3.140000104904175


3. Bibliothek flatted: Lösung für zirkuläre Referenzen



Wenn Ihr Objekt zirkuläre Referenzen enthält (z. B. ein DOM-Baum oder ein Graph), kommt das standardmäßige JSON nicht zurecht. Die Bibliothek flatted (Autor — Andrea Giammarchi) löst dieses Problem.



Installation und Beispiel:

npm install flatted


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

const circularObj = { name: 'Zyklus' };circularObj.self = circularObj; // zirkuläre Referenz

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

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


4. Protocol Buffers (protobuf) sch

Empfehlungen