JSON से Rust Structs (serde)

JSON से Rust struct बनाएँ जिनमें serde derive, snake_case फ़ील्ड, rename एट्रिब्यूट, null के लिए Option और ऐरे के लिए Vec हों। मुफ़्त और ब्राउज़र में चलता है।

serde (derive सहित) और serde_json crate चाहिए। फ़ील्ड snake_case में हैं, JSON कुंजी अलग होने पर #[serde(rename)] लगता है।

पूरी तरह आपके ब्राउज़र में चलता है। आपका डेटा कभी अपलोड नहीं होता।

संबंधित टूल्स

सभी देखें

JSON से Rust क्या है?

JSON पेस्ट करें और ऐसी Rust struct परिभाषाएँ पाएँ जो उसे serde से डिसीरियलाइज़ करती हैं। हर struct Debug, Clone, Serialize, Deserialize derive करता है; फ़ील्ड नाम snake_case में होते हैं और जहाँ ज़रूरी हो वहाँ #[serde(rename = "…")] से मूल कुंजी बनाए रखते हैं।

JSON से Rust का उपयोग कैसे करें

  1. JSON इनपुट में JSON नमूना पेस्ट करें (या उदाहरण लोड करें / फ़ाइल खोलें दबाएँ)।
  2. रूट टाइप का नाम तय करें (डिफ़ॉल्ट Root)।
  3. बना हुआ Rust कोड कॉपी करें या फ़ाइल के रूप में डाउनलोड करें।

उदाहरण

इनपुट
{"id":1,"name":"A","tags":["x"]}
आउटपुट
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub tags: Vec<String>,
}

JSON से Rust का उपयोग कब करें

JSON पढ़ने वाला Rust क्लाइंट या CLI लिखते समय इसका उपयोग करें। बाद में टाइप को निखारें, जैसे छोटी गिनतियों के लिए u32 या टाइमस्टैम्प के लिए chrono टाइप, क्योंकि नमूना असली सीमाएँ नहीं बता सकता।

JSON से Rust कैसे काम करता है

नमूने को रिकर्सिव ढंग से पढ़ा जाता है और हर स्थान उन टाइप को इकट्ठा करता है जो उसने देखे। ऑब्जेक्ट के ऐरे एक टाइप में मिला दिए जाते हैं: जो कुंजी कुछ एलिमेंट में नहीं है वह वैकल्पिक बन जाती है, जो कुंजी कहीं null है वह nullable बन जाती है, दशमलव के साथ मिले पूर्णांक फ़्लोटिंग-पॉइंट टाइप बनते हैं, और बाकी हर मिश्रित टाइप डायनैमिक टाइप पर चला जाता है। नेस्टेड ऑब्जेक्ट अपने नामित टाइप बनते हैं (कुंजी का PascalCase, ऐरे कुंजियों का एकवचन: orders → Order), और नाम टकराने पर अंक जुड़ते हैं। Rust आउटपुट पूर्णांक को i64, दशमलव को f64, स्ट्रिंग को String, बूलियन को bool, ऐरे को Vec<T>, nullable मानों को Option<T> और डायनैमिक या सिर्फ़-null मानों को serde_json::Value से मैप करता है। जो फ़ील्ड कुछ नमूनों में गायब हैं वे #[serde(default, skip_serializing_if = "Option::is_none")] वाले Option<T> बनते हैं। type जैसे कीवर्ड raw आइडेंटिफ़ायर (r#type) के रूप में लिखे जाते हैं।

सामान्य उपयोग मामले

  • reqwest + serde से REST API रिस्पॉन्स डिसीरियलाइज़ करना
  • CLI टूल के लिए JSON कॉन्फ़िग फ़ाइल का मॉडल बनाना
  • वेबहुक हैंडलर के लिए टाइप बनाना
  • Rust इंटीग्रेशन टेस्ट के लिए फ़िक्स्चर बदलना

अक्सर पूछे जाने वाले प्रश्न

मुझे कौन-से crate चाहिए?

derive फ़ीचर वाला serde और serde_json: serde = { version = "1", features = ["derive"] } और serde_json = "1"।

serde_json::Value क्यों?

यह तब इस्तेमाल होता है जब कोई कुंजी मिश्रित टाइप की हो या नमूने में हमेशा null हो, इसलिए कोई ठोस Rust टाइप सुरक्षित रूप से नहीं चुना जा सकता।

r#type क्यों?

type Rust का कीवर्ड है; raw आइडेंटिफ़ायर सिंटैक्स उसे फ़ील्ड नाम के रूप में इस्तेमाल करने देता है जबकि serde फिर भी JSON कुंजी से मेल खाता है।

और श्रेणियाँ देखें