Node.js में ऑब्जेक्ट सीरियलाइज़ेशन: JSON, Buffer और Protobuf

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript (Node.js) में ऑब्जेक्ट सीरियलाइज़ेशन: JSON से बाइनरी प्रोटोकॉल तक

सीरियलाइज़ेशन जटिल डेटा संरचनाओं (ऑब्जेक्ट, ऐरे, Map, Set) को ऐसे फॉर्मेट में बदलने की प्रक्रिया है जिसे फ़ाइल में सेव किया जा सके, नेटवर्क पर भेजा जा सके या डेटाबेस में स्टोर किया जा सके। Node.js में यह काम खासतौर पर महत्वपूर्ण है क्योंकि सर्वर एप्लिकेशन अक्सर बड़ी मात्रा में डेटा, माइक्रोसर्विसेज़ और WebSocket कनेक्शन के साथ काम करते हैं। इस लेख में हम Node.js वातावरण में ऑब्जेक्ट सीरियलाइज़ेशन के मुख्य टूल्स और लाइब्रेरीज़ पर चर्चा करेंगे।

1. बिल्ट-इन JSON: डी-फैक्टो स्टैंडर्ड

JSON मॉड्यूल Node.js में बिना किसी अतिरिक्त पैकेज के उपलब्ध है। यह JSON.stringify() और JSON.parse() मेथड को सपोर्ट करता है।

const user = {
  name: 'अन्ना',
  age: 28,
  skills: ['JavaScript', 'Node.js'],
  active: true
};

// सीरियलाइज़ेशन
const jsonString = JSON.stringify(user);
console.log(jsonString);
// {"name":"अन्ना","age":28,"skills":["JavaScript","Node.js"],"active":true}

// डीसीरियलाइज़ेशन
const parsedUser = JSON.parse(jsonString);
console.log(parsedUser.name); // अन्ना

फायदे:

  • मानव-पठनीय फॉर्मेट
  • सभी वातावरणों में बिल्ट-इन सपोर्ट
  • डीबग करना आसान

नुकसान:

  • undefined, BigInt, Date (स्ट्रिंग में बदलता है), Map, Set को सपोर्ट नहीं करता
  • बाइनरी फॉर्मेट से धीमा
  • सिंटैक्स एलिमेंट्स (कोट्स, कॉमा) के कारण अतिरिक्त साइज़

2. Node.js में Buffer और बाइनरी सीरियलाइज़ेशन

हाई-परफॉर्मेंस एप्लिकेशन (गेम्स, फाइनेंशियल डेटा, IoT) के लिए बाइनरी फॉर्मेट का उपयोग किया जाता है। Node.js में इसके लिए Buffer मॉड्यूल है।

const buf = Buffer.alloc(8);
buf.writeUInt32BE(123456, 0); // 4-बाइट अनसाइन्ड इंटीजर लिखना
buf.writeUInt32BE(789012, 4); // दूसरा नंबर

console.log(buf); // <Buffer 00 01 e2 40 00 0c 08 14>

// पढ़ना
const a = buf.readUInt32BE(0); // 123456
const b = buf.readUInt32BE(4); // 789012

बाइनरी फॉर्मेट में जटिल ऑब्जेक्ट सीरियलाइज़ेशन के लिए विशेष लाइब्रेरीज़ का उपयोग करना बेहतर है।

3. Protocol Buffers (protobuf) — कुशल बाइनरी सीरियलाइज़ेशन

protobuf.js लाइब्रेरी .proto फ़ाइलों में वर्णित स्कीमा के अनुसार ऑब्जेक्ट को सीरियलाइज़ करने की अनुमति देती है। यह gRPC और कई माइक्रोसर्विस आर्किटेक्चर में उपयोग किया जाने वाला मानक है।

इंस्टॉलेशन:

npm install protobufjs

उपयोग का उदाहरण:

const protobuf = require('protobufjs');

protobuf.load('user.proto').then(root => {
  const User = root.lookupType('userpackage.User');

  const payload = { id: 1, name: 'ईवान', email: 'ivan@example.com' };
  
  // सीरियलाइज़ेशन
  const errMsg = User.verify(payload);
  if (errMsg) throw Error(errMsg);
  
  const buffer = User.encode(payload).finish();
  console.log('बाइनरी बफर:', buffer);

  // डीसीरियलाइज़ेशन
  const decoded = User.decode(buffer);
  console.log('डिकोड किया गया:', decoded);
});

user.proto फ़ाइल:

syntax = "proto3";
package userpackage;
message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

फायदे:

  • अधिकतम प्रदर्शन
  • कॉम्पैक्ट साइज़ (JSON से 30-50% छोटा)
  • सख्त टाइपिंग और वैलिडेशन
  • क्रॉस-प्लेटफ़ॉर्म

नुकसान:

  • स्कीमा (.proto) का विवरण आवश्यक
  • डीबग करना मुश्किल (बाइनरी डेटा)
  • सर्विसेज़ के बीच स्कीमा सिंक्रोनाइज़ेशन की आवश्यकता

4. MessagePack — बाइनरी JSON

msgpackr (या msgpack5) लाइब्रेरी MessagePack फॉर्मेट को लागू करती है, जो

अनुशंसाएँ