Objektserialisierung in Node.js: JSON, Buffer und Protobuf

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

Objektserialisierung in JavaScript (Node.js): Von JSON bis zu binären Protokollen

\n\n

Serialisierung ist der Prozess der Umwandlung komplexer Datenstrukturen (Objekte, Arrays, Map, Set) in ein Format, das in einer Datei gespeichert, über ein Netzwerk übertragen oder in einer Datenbank gespeichert werden kann. In Node.js ist diese Aufgabe besonders wichtig, da Serveranwendungen oft mit großen Datenmengen, Microservices und WebSocket-Verbindungen arbeiten. In diesem Artikel werden wir die wichtigsten Werkzeuge und Bibliotheken zur Serialisierung von Objekten in der Node.js-Umgebung behandeln.

\n\n

1. Integriertes JSON: Der De-facto-Standard

\n

Das JSON-Modul ist in Node.js ohne Installation zusätzlicher Pakete verfügbar. Es unterstützt die Methoden JSON.stringify() und JSON.parse().

\n\n
const user = {\n  name: 'Anna',\n  age: 28,\n  skills: ['JavaScript', 'Node.js'],\n  active: true\n};\n\n// Serialisierung\nconst jsonString = JSON.stringify(user);\nconsole.log(jsonString);\n// {"name":"Anna","age":28,"skills":["JavaScript","Node.js"],"active":true}\n\n// Deserialisierung\nconst parsedUser = JSON.parse(jsonString);\nconsole.log(parsedUser.name); // Anna
\n\n

Vorteile:

\n
    \n
  • Menschlich lesbares Format
  • \n
  • Integrierte Unterstützung in allen Umgebungen
  • \n
  • Einfache Fehlersuche
  • \n
\n\n

Nachteile:

\n
    \n
  • Unterstützt keine undefined, BigInt, Date (wandelt in String um), Map, Set
  • \n
  • Langsamer als binäre Formate
  • \n
  • Übermäßige Größe aufgrund von Syntaxelementen (Anführungszeichen, Kommas)
  • \n
\n\n

2. Buffer und binäre Serialisierung in Node.js

\n

Für Hochleistungsanwendungen (Spiele, Finanzdaten, IoT) werden binäre Formate verwendet. In Node.js gibt es dafür das Buffer-Modul.

\n\n
const buf = Buffer.alloc(8);\nbuf.writeUInt32BE(123456, 0); // Schreiben einer 4-Byte-Ganzzahl ohne Vorzeichen\nbuf.writeUInt32BE(789012, 4); // zweite Zahl\n\nconsole.log(buf); // <Buffer 00 01 e2 40 00 0c 08 14>\n\n// Lesen\nconst a = buf.readUInt32BE(0); // 123456\nconst b = buf.readUInt32BE(4); // 789012
\n\n

Für die komplexe Serialisierung von Objekten im Binärformat ist es besser, spezialisierte Bibliotheken zu verwenden.

\n\n

3. Protocol Buffers (protobuf) — Effiziente binäre Serialisierung

\n

Die Bibliothek protobuf.js ermöglicht die Serialisierung von Objekten gemäß einem Schema, das in .proto-Dateien beschrieben ist. Dies ist ein Standard, der in gRPC und vielen Microservice-Architekturen verwendet wird.

\n\n

Installation:

\n
npm install protobufjs
\n\n

Anwendungsbeispiel:

\n
const protobuf = require('protobufjs');\n\nprotobuf.load('user.proto').then(root => {\n  const User = root.lookupType('userpackage.User');\n\n  const payload = { id: 1, name: 'Ivan', email: 'ivan@example.com' };\n  \n  // Serialisierung\n  const errMsg = User.verify(payload);\n  if (errMsg) throw Error(errMsg);\n  \n  const buffer = User.encode(payload).finish();\n  console.log('Binärer Puffer:', buffer);\n\n  // Deserialisierung\n  const decoded = User.decode(buffer);\n  console.log('Dekodiert:', decoded);\n});
\n\n

Datei user.proto:

\n
syntax = "proto3";\npackage userpackage;\nmessage User {\n  int32 id = 1;\n  string name = 2;\n  string email = 3;\n}\n
\n\n

Vorteile:

\n
    \n
  • Maximale Leistung
  • \n
  • Kompakte Größe (30-50 % kleiner als JSON)
  • \n
  • Strenge Typisierung und Validierung
  • \n
  • Plattformunabhängigkeit
  • \n
\n\n

Nachteile:

\n
    \n
  • Erfordert eine Schemabeschreibung (.proto)
  • \n
  • Schwierigere Fehlersuche (binäre Daten)
  • \n
  • Notwendigkeit der Synchronisierung von Schemas zwischen Diensten
  • \n
\n\n

4. MessagePack — Binäres JSON

\n

Empfehlungen