Rust में JSON प्रसंस्करण: serde_json और डेटा के साथ काम करना
\n\nJSON (JavaScript Object Notation) वेब डेवलपमेंट, API और कॉन्फ़िगरेशन फ़ाइलों में डेटा विनिमय के सबसे लोकप्रिय प्रारूपों में से एक बना हुआ है। Rust भाषा में, जो अपने प्रदर्शन और सुरक्षा के लिए जानी जाती है, JSON के साथ काम करना क्रेट्स के शक्तिशाली पारिस्थितिकी तंत्र के माध्यम से कार्यान्वित किया जाता है। मुख्य उपकरण serde_json लाइब्रेरी है, जो serde सीरियलाइज़ेशन फ्रेमवर्क पर बनाई गई है। इस लेख में, हम विस्तार से समझेंगे कि Rust में JSON को कैसे पार्स करें, बनाएं और रूपांतरित करें, साथ ही वैकल्पिक दृष्टिकोणों पर भी विचार करेंगे।
1. serde_json की स्थापना और कनेक्शन
\n\nकाम शुरू करने के लिए, Cargo.toml फ़ाइल में निर्भरताएँ जोड़ें:
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\n\nserde Serialize और Deserialize ट्रेट्स प्रदान करता है, और serde_json JSON के लिए विशिष्ट कार्यान्वयन प्रदान करता है। क्रेट्स जोड़ने के बाद, उन्हें कोड में आयात किया जा सकता है:
use serde::{Deserialize, Serialize};\nuse serde_json::Result;\n\n2. संरचनाओं का JSON में सीरियलाइज़ेशन
\n\nRust संरचना को JSON में बदलने के लिए, इसे #[derive(Serialize)] विशेषता से एनोटेट करना आवश्यक है। उपयोगकर्ता डेटा के साथ एक उदाहरण देखें:
#[derive(Serialize)]\nstruct User {\n name: String,\n age: u8,\n email: String,\n active: bool,\n}\n\nfn main() -> Result<()> {\n let user = User {\n name: "एलेक्सी".to_string(),\n age: 30,\n email: "alex@example.com".to_string(),\n active: true,\n };\n\n let json = serde_json::to_string(&user)?;\n println!("{}", json);\n // आउटपुट: {"name":"एलेक्सी","age":30,"email":"alex@example.com","active":true}\n Ok(())\n}\n\nविधि serde_json::to_string एक Result<String> लौटाती है। फ़ॉर्मेटेड आउटपुट के लिए serde_json::to_string_pretty का उपयोग करें।
3. JSON का संरचनाओं में डीसीरियलाइज़ेशन
\n\nविपरीत प्रक्रिया — JSON स्ट्रिंग को Rust संरचना में बदलना। इसके लिए संरचना को Deserialize लागू करना होगा:
#[derive(Deserialize, Debug)]\nstruct User {\n name: String,\n age: u8,\n email: String,\n active: bool,\n}\n\nfn main() -> Result<()> {\n let data = r#"\n {\n "name": "मारिया",\n "age": 25,\n "email": "maria@example.com",\n "active": false\n }"#;\n\n let user: User = serde_json::from_str(data)?;\n println!("{:?}", user);\n // आउटपुट: User { name: "मारिया", age: 25, email: "maria@example.com", active: false }\n Ok(())\n}\n\nयदि JSON में संरचना में अनुपलब्ध फ़ील्ड हैं, या इसके विपरीत, तो #[serde(default)] या #[serde(skip_serializing_if = "Option::is_none")] विशेषताओं का उपयोग करें।
4. मनमाने JSON (Value) के साथ काम करना
\n\nकभी-कभी डेटा संरचना पहले से ज्ञात नहीं होती है। ऐसे मामलों में, serde_json::Value एनुम का उपयोग किया जाता है, जो किसी भी JSON प्रकार का प्रतिनिधित्व कर सकता है:
use serde_json::Value;\n\nfn main() -> Result<()> {\n let data = r#"\n {\n "name": "इवान",\n "age": 35,\n "hobbies": ["पढ़ना", "प्रोग्रामिंग"],\n "address": null\n }"#;\n\n let v: Value = serde_json::from_str(data)?;\n\n // फ़ील्ड तक पहुँच\n if let Some(name) = v.get("name") {\n println!("नाम: {}", name);\n }\n\n // ऐरे निकालना\n if let Some(hobbies) = v.get("hobbies").and_then(|h| h.as_array()) {\n for hobby in hobbies {\n println!("शौक: {}", hobby);\n }\n }\n\n Ok(())\n}\n\nValue डेटा को सुरक्षित रूप से निकालने के लिए as_str(), as_u64(), as_array() और अन्य विधियों का समर्थन करता है।