जावास्क्रिप्ट (Node.js) में ऑब्जेक्ट सीरियलाइज़ेशन: एक संपूर्ण गाइड

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

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

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

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



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



1. बिल्ट-इन JSON: डी-फैक्टो मानक



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



बेसिक सीरियलाइज़ेशन का उदाहरण:

const user = {  name: 'अलेक्सेई',  age: 30,  roles: ['admin', 'editor'],  metadata: null};

// स्ट्रिंग में सीरियलाइज़ेशनconst jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"अलेक्सेई","age":30,"roles":["admin","editor"],"metadata":null}

// वापस ऑब्जेक्ट में डीसीरियलाइज़ेशनconst parsedUser = JSON.parse(jsonString);console.log(parsedUser.name); // अलेक्सेई


JSON की सीमाएँ:

  • फंक्शन का समर्थन नहीं करता — ऑब्जेक्ट के मेथड हटा दिए जाएंगे।
  • साइक्लिक रेफरेंस का समर्थन नहीं करता — Converting circular structure to JSON त्रुटि उत्पन्न करेगा।
  • undefined, Symbol, BigInt को अनदेखा करता है (अंतिम वाला त्रुटि उत्पन्न करेगा)।
  • Date को स्ट्रिंग में बदलता है — डीसीरियलाइज़ेशन पर Date ऑब्जेक्ट पुनर्स्थापित नहीं होता।


replacer के साथ कस्टम सीरियलाइज़ेशन:

const data = {  name: 'टेस्ट',  date: new Date(),  secret: 'सहेजना नहीं',  nested: { value: 42 }};

const json = JSON.stringify(data, (key, value) => { if (key === 'secret') return undefined; // फ़ील्ड को बाहर करें if (value instanceof Date) return value.toISOString(); // तिथि को स्पष्ट रूप से फॉर्मेट करें return value;}, 2); // इंडेंटेशन के साथ फॉर्मेटिंग

console.log(json);


2. Buffer के माध्यम से सीरियलाइज़ेशन: बाइनरी डेटा के लिए



जब बाइनरी डेटा (इमेज, फ़ाइलें, protobuf) ट्रांसमिट करने की आवश्यकता होती है, तो Buffer क्लास का उपयोग किया जाता है। Node.js में Buffer स्ट्रिंग और ऑब्जेक्ट को बाइनरी फॉर्मेट में और वापस बदलने की अनुमति देता है।



Buffer और JSON के साथ उदाहरण:

const obj = { message: 'नमस्ते, दुनिया!' };

// JSON में सीरियलाइज़ करें, फिर Buffer मेंconst 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 ...

// वापसconst restored = JSON.parse(buffer.toString('utf-8'));console.log(restored.message); // नमस्ते, दुनिया!


Buffer में संख्याओं का प्रत्यक्ष सीरियलाइज़ेशन:

const buf = Buffer.alloc(8);buf.writeInt32LE(255, 0); // 32-बिट पूर्णांक लिखेंbuf.writeFloatLE(3.14, 4); // float लिखें

console.log(buf); // बाइनरी प्रतिनिधित्व// पढ़नाconsole.log(buf.readInt32LE(0)); // 255console.log(buf.readFloatLE(4)); // 3.140000104904175


3. flatted लाइब्रेरी: साइक्लिक रेफरेंस के लिए समाधान



यदि आपके ऑब्जेक्ट में साइक्लिक रेफरेंस हैं (जैसे DOM ट्री या ग्राफ), तो मानक JSON काम नहीं करेगा। flatted लाइब्रेरी (लेखक — Andrea Giammarchi) इस समस्या को हल करती है।



स्थापना और उदाहरण:

npm install flatted


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

const circularObj = { name: 'चक्र' };circularObj.self = circularObj; // साइक्लिक रेफरेंस

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

const restored = parse(json);console.log(restored.name); // चक्रconsole.log(restored.self === restored); // true


4. Protocol Buffers (protobuf) और

अनुशंसाएँ