JSON से Rust Struct जनरेटर
JSON से serde Serialize और Deserialize डिराइव्स (derives) के साथ Rust स्ट्रक्ट (struct) डेफिनिशन बनाएँ। यह JSON वैल्यूज़ से Rust टाइप्स का पता लगाता है और serde_json के साथ इस्तेमाल के लिए तैयार, सही तरीके से लिखे गए (idiomatic) स्ट्रक्ट्स बनाता है।
#[derive(Serialize, Deserialize)] एट्रिब्यूट्स के साथ Rust स्ट्रक्ट्स (structs) बनाता है।
JSON प्रकारों को Rust प्रिमिटिव्स (String, i64, f64, bool, Vec<T>, Option<T>) से मैप करता है।
JSON कीज़ को Rust के स्टैंडर्ड फ़ील्ड नामों से मैप करने के लिए serde रीनेम एट्रिब्यूट्स का इस्तेमाल करता है।
नेस्टेड JSON ऑब्जेक्ट्स के लिए नेस्टेड स्ट्रक्ट डेफिनिशन बनाता है।
आउटपुट serde_json::from_str और serde_json::to_string के साथ इस्तेमाल के लिए तैयार है।
कैसे इस्तेमाल करें
इनपुट फ़ील्ड में JSON ऑब्जेक्ट पेस्ट करें
जेनरेटर serde एट्रिब्यूट्स के साथ Rust स्ट्रक्ट डेफिनिशन बनाता है।
अपने Cargo.toml में serde और serde_json जोड़ें।
स्ट्रक्ट्स (structs) को अपनी Rust सोर्स फ़ाइल में पेस्ट करें और serde_json के साथ इस्तेमाल करें।
Rust API डेवलपमेंट
- reqwest के साथ REST API रिस्पॉन्स को डीसीरियलाइज़ करें
- Axum या Actix-Web हैंडलर प्रकारों को परिभाषित करें
- Rust सर्विसेज़ में JSON कॉन्फ़िग फ़ाइलों को पार्स करें
सिस्टम्स प्रोग्रामिंग
- Rust वर्कर्स में JSON टेलीमेट्री इवेंट्स को टाइप करें
- वेबहूक पेलोड्स को डीसीरियलाइज़ करें
- स्ट्रक्चर्ड लॉग एंट्रीज़ को पार्स करें
रस्ट इकोसिस्टम
- सर्दे
- serde_json
- रिक्वेस्ट
- अक्सुम
- actix-web
- टोक्यो
ऐसे JSON फ़ील्ड्स के लिए Option<T> का इस्तेमाल करें जो null हो सकते हैं या मौजूद नहीं हो सकते — यह serialize करने पर JSON null में बदल जाता है और deserialize करते समय गायब कीज़ (missing keys) को संभालता है।
अगर सभी JSON कीज़ camelCase फ़ॉलो करती हैं, तो हर फ़ील्ड का नाम बदलने के बजाय struct में #[serde(rename_all = "camelCase")] जोड़ें।
अनजान या डायनामिक JSON फ़ील्ड्स के लिए, एक 'कैच-ऑल' फ़ील्ड जोड़ें: #[serde(flatten)] extra: HashMap<String, serde_json::Value>
डेवलपमेंट के दौरान API रिस्पॉन्स से अनपेक्षित JSON फ़ील्ड्स का पता लगाने के लिए structs में #[serde(deny_unknown_fields)] जोड़ें।
ऑप्शनल फ़ील्ड्स के लिए #[serde(default)] का इस्तेमाल करें, ताकि उन मामलों को संभाला जा सके जहाँ JSON ऑब्जेक्ट में की (key) पूरी तरह से गायब हो सकती है।
एप्लीकेशन कोड में जिन 'structs' को लॉग या क्लोन किया जाएगा, उनके लिए 'Serialize' और 'Deserialize' के साथ-साथ 'Clone' और 'Debug' 'derives' भी जोड़ें।
अक्सर पूछे जाने वाले सवाल
हमारे टूल्स और सेवाओं के बारे में आम सवालों के जवाब पाएँ।
JSON से Rust Struct को समझना
Rust का ओनरशिप मॉडल और सख्त टाइप सिस्टम इसे JSON API रिस्पॉन्स और वेबहुक पेलोड जैसे भरोसेमंद न होने वाले बाहरी डेटा को संभालने के लिए सबसे सुरक्षित भाषाओं में से एक बनाते हैं। Serde फ्रेमवर्क — जो 'सीरियलाइज़ेशन' और 'डी-सीरियलाइज़ेशन' का संक्षिप्त रूप है — Rust इकोसिस्टम में JSON को संभालने के लिए मुख्य मानक (de facto standard) है; यह प्रोसीजरल मैक्रो डिराइव्स के ज़रिए बहुत ज़्यादा ऑप्टिमाइज़्ड और कंपाइल-टाइम पर वेरिफ़ाई होने वाला सीरियलाइज़ेशन देता है। Serde के लिए JSON बैकएंड, serde_json, crates.io पर सबसे ज़्यादा डाउनलोड किए जाने वाले क्रेट्स में से एक है। API क्लाइंट, वेब सर्विस या डेटा प्रोसेसिंग पाइपलाइन बनाने वाले Rust डेवलपर्स के लिए, JSON उदाहरणों से सटीक serde-एनोटेटेड स्ट्रक्ट (struct) टाइप तय करना एक बुनियादी काम है, और असली डेटा सैंपल से उन्हें अपने-आप बनाना डेवलपमेंट की रफ़्तार को काफ़ी बढ़ा देता है।
Serde डिराइव मैक्रोज़ (#[derive(Serialize, Deserialize)]) कंपाइल टाइम पर struct डेफ़िनिशन और उसके फ़ील्ड एट्रिब्यूट्स के आधार पर सारा सीरियलाइज़ेशन और डीसीरियलाइज़ेशन कोड जनरेट करते हैं। Serde(rename) एट्रिब्यूट Rust के आम snake_case फ़ील्ड नामों को JSON API में इस्तेमाल होने वाले camelCase या दूसरे केसिंग कन्वेंशन में मैप करता है। Serde(rename_all) struct एट्रिब्यूट सभी फ़ील्ड्स पर एक साथ नेमिंग कन्वेंशन ट्रांसफ़ॉर्मेशन लागू करता है (जैसे, rename_all = "camelCase" सभी snake_case फ़ील्ड्स को अपने-आप camelCase JSON कीज़ में बदल देता है)। ऑप्शनल फ़ीचर उन फ़ील्ड्स को छोड़ देता है जो डीसीरियलाइज़ किए जा रहे JSON में मौजूद नहीं होते, और डिफ़ॉल्ट एट्रिब्यूट मौजूद न होने वाले फ़ील्ड्स के लिए डिफ़ॉल्ट वैल्यूज़ देता है। ये एट्रिब्यूट्स डेवलपर्स को बिना कोई मैनुअल पार्सिंग कोड लिखे सीरियलाइज़ेशन के व्यवहार पर बारीक कंट्रोल देते हैं।
Rust का टाइप सिस्टम JSON के ऑप्शनल और नलेबल सिमेंटिक्स को Option<T> एनम टाइप के ज़रिए दिखाता है। JSON का कोई फ़ील्ड जो null हो सकता है, वह Option<T> से मैप होता है, जहाँ None का मतलब null होता है और Some(value) का मतलब कोई भी non-null वैल्यू होती है। serde इस मैपिंग को अपने-आप संभालता है: सीरियलाइज़ करते समय None null बन जाता है; डीसीरियलाइज़ करते समय null None बन जाता है। जो फ़ील्ड JSON ऑब्जेक्ट में पूरी तरह से गायब हो सकते हैं (साफ़ तौर पर null होने के बजाय), उनके लिए भी Option<T> के साथ serde(skip_serializing_if = "Option::is_none") एट्रिब्यूट का इस्तेमाल करके साफ़ राउंड-ट्रिप व्यवहार पाया जा सकता है। null (वैल्यू का साफ़ तौर पर न होना) और missing (की का मौजूद न होना) के बीच फ़र्क करने के लिए Option के साथ serde(default) का इस्तेमाल करके ज़्यादा बारीकी से काम करने की ज़रूरत होती है।
यह JSON से Rust Struct जनरेटर ऐसे struct डेफ़िनिशन बनाता है जिनमें #[derive(Serialize, Deserialize)] मैक्रोज़, PascalCase struct नाम, ओरिजिनल JSON की-नामों के लिए serde रीनेम एट्रिब्यूट्स के साथ snake_case फ़ील्ड नाम, और हर JSON वैल्यू टाइप के लिए सही Rust टाइप होते हैं। इसमें String वैल्यू String बन जाती हैं, integer वैल्यू i64 बन जाती हैं, floating-point वैल्यू f64 बन जाती हैं, boolean वैल्यू bool बन जाती हैं, array Vec<ElementType> बन जाती हैं, नेस्टेड ऑब्जेक्ट नेस्टेड struct टाइप बन जाते हैं, और null वैल्यू Option<T> बन जाती हैं। Cargo.toml में serde और serde_json डिपेंडेंसी जोड़ने के बाद आउटपुट कंपाइल होने के लिए तैयार हो जाता है। बाहरी API के साथ इंटीग्रेट करने, माइक्रोसर्विसेज़ बनाने या JSON इवेंट स्ट्रीम को प्रोसेस करने वाले Rust डेवलपर्स के लिए, यह जनरेटर शुरुआती टाइप डेफ़िनिशन के सबसे थकाऊ काम को खत्म कर देता है।