একটি JSON নমুনাকে serde derive, রিনেম, Option ও Vec সহ Rust স্ট্রাক্টে রূপান্তর করুন
আপনার ব্রাউজারে চলে। আপনি যা লেখেন তা কোথাও পাঠানো হয় না। যাচাই করা হয়েছে 16 অক্টোবর, 2026।একটি JSON নমুনা পেস্ট করুন আর serde-এর Serialize ও Deserialize derive সহ Rust স্ট্রাক্ট পান। পূর্ণসংখ্যা হয় i64 আর যেকোনো দশমিক একটি ফিল্ডকে f64 করে; null বা কিছু অবজেক্টে অনুপস্থিত মান হয় Option<T>, আর snake_case ফিল্ড থেকে ভিন্ন বানানের কী একটি serde rename পায়, সবগুলো camelCase হলে 1টি rename_all।
এই পৃষ্ঠাটি ইংরেজি মূল লেখা থেকে যন্ত্রের সাহায্যে অনুবাদ করা হয়েছে। এই অনুবাদটি এখনও কোনো মানুষ পর্যালোচনা করেননি, তাই ইংরেজি সংস্করণটিকেই নির্ভরযোগ্য ধরুন। ইংরেজি মূল লেখাটি পড়ুন
বাঁ দিকের বাক্সে একটি JSON নমুনা পেস্ট করুন, যেমন একটি API রেসপন্স।
লেখার সাথে সাথে Rust স্ট্রাক্ট দেখা যায়, প্রতিটিতে #[derive(Serialize, Deserialize)], snake_case ফিল্ড এবং দরকারি serde রিনেমসহ।
চাইলে প্রতিটি ফিল্ডে Option বা PartialEq চালু করুন, এবং রুট স্ট্রাক্টের নাম ঠিক করুন।
কপি করুন চাপুন, অথবা models.rs সংরক্ষণ করতে ডাউনলোড চাপুন, এবং Cargo.toml-এ serde (derive ফিচারসহ) ও serde_json যোগ করুন।
Rust serde দিয়ে JSON ডিকোড করে, আর প্রতিটি অবজেক্টের জন্য এমন একটি স্ট্রাক্ট দরকার যার ফিল্ডগুলোর টাইপ সঠিক এবং নামগুলো JSON কী-এর সাথে মেলে। এই কনভার্টার একটি নমুনা থেকে সেই স্ট্রাক্টগুলো লেখে, তাই একটি লম্বা API রেসপন্স এক পেস্টেই কম্পাইল হওয়া Rust হয়ে যায়।
টাইপ কীভাবে বেছে নেওয়া হয়।
| JSON মান | Rust টাইপ |
|---|---|
| "text" | String |
| true / false | bool |
| 42 (শুধু পূর্ণসংখ্যা) | i64 |
| 4.5 (কোনো দশমিক দেখা গেলে) | f64 |
| null, সাথে আরেকটি টাইপ | Option |
| শুধু null, বা মিশ্র ধরন | serde_json::Value |
| [ ... ] | Vec<...> |
| { } ফাঁকা | Map<String, Value> |
| { ... } | নিজস্ব একটি স্ট্রাক্ট |
অনুপস্থিত কী। একটি অ্যারের সব অবজেক্ট মিলে একটি স্ট্রাক্ট হয়। যে কী কিছু অবজেক্টে বাদ থাকে সেটি Option হয়, কারণ serde একটি অনুপস্থিত Option-কে None ধরে আর অন্য যেকোনো অনুপস্থিত ফিল্ডকে ত্রুটি। সেই ফিল্ডগুলো skip_serializing_if-ও পায়, তাই স্ট্রাক্টটি আবার লিখলে সেগুলো আবার বাদ পড়ে।
নাম। ফিল্ডগুলো snake_case-এ থাকে। প্রতিটি কী যখন শুধু তার ফিল্ডের camelCase রূপ, তখন স্ট্রাক্টে একটিমাত্র rename_all থাকে; নইলে প্রতিটি ভিন্ন ফিল্ড নিজের rename পায়। কীওয়ার্ড হয় raw আইডেন্টিফায়ার, যেমন r#type; self, super ও crate raw হতে পারে না, তাই সেগুলো rename সহ self_ হয়।
অপশন। যে API যেকোনো কী বাদ দিতে পারে, তার জন্য প্রতিটি ফিল্ডে Option উপযুক্ত। PartialEq derive করলে টেস্টে মান তুলনা করা যায়। আপনি নাম না দিলে রুট স্ট্রাক্টের নাম Root।
প্রতিটি আউটপুট যাচাই করা হয়েছে serde-এর নিয়মে Rust আবার পড়ে এবং তা দিয়ে 9টি নমুনা ডিকোড করে। আপনি যা পেস্ট করেন তার কিছুই ব্রাউজারের বাইরে যায় না।
কনভার্টারে একটি JSON নমুনা পেস্ট করুন, পাশেই Rust স্ট্রাক্ট দেখা যাবে, প্রতিটি Serialize ও Deserialize derive করে। Cargo.toml-এ derive ফিচারসহ serde এবং serde_json যোগ করুন, স্ট্রাক্টগুলো একটি মডিউলে পেস্ট করুন, এবং serde_json::from_str::<Root>(&text) দিয়ে ডিকোড করুন।
নমুনায় কোনো ফিল্ড null দেখালে, বা অ্যারের কিছু অবজেক্টে কী বাদ থাকলে, ফিল্ডটি Option হয়। serde একটি Option-এ অনুপস্থিত কী-কে None হিসেবে ডিকোড করে, আর অন্য যেকোনো অনুপস্থিত ফিল্ড ত্রুটি, তাই Option-ই স্ট্রাক্টকে নমুনার প্রতিটি অবজেক্ট গ্রহণ করতে দেয়।
Rust-এর স্টাইল অনুযায়ী ফিল্ডগুলো snake_case-এ লেখা হয়। প্রতিটি কী তার ফিল্ডের camelCase রূপ হলে স্ট্রাক্টটি একটিমাত্র #[serde(rename_all = "camelCase")] পায়; নইলে ভিন্নভাবে লেখা প্রতিটি ফিল্ড নিজের #[serde(rename = "key")] পায়, তাই first-name বা 2fa-এর মতো কী-ও ডিকোড হয়।
একটি সংখ্যা কত বড় হতে পারে JSON তা বলে না, তাই i64 নিরাপদ পূর্ণসংখ্যা টাইপ, আর f64 সেই ডাবল প্রিসিশনের সাথে মেলে যাতে JSON সংখ্যা পড়া হয়। নমুনার কোনো মানে দশমিক অংশ থাকলেই ফিল্ডটি f64 হয়, কারণ serde 4.5-কে একটি পূর্ণসংখ্যায় পড়তে অস্বীকার করে।
কীওয়ার্ডগুলো raw আইডেন্টিফায়ার হিসেবে লেখা হয়, যেমন r#type, আর কী-এর সাথে মেলানোর সময় serde r# সরিয়ে দেয়, তাই কোনো rename লাগে না। যে চারটি কীওয়ার্ড raw হতে পারে না, self, Self, super ও crate, সেগুলো self_ ও অনুরূপ হয়, মূল কী-তে ফেরার একটি rename সহ।
না। রূপান্তর আপনার ব্রাউজারেই চলে, কোনো সার্ভারে অনুরোধ যায় না, আর JSON সংরক্ষিত হয় না, তাই টোকেন বা ব্যক্তিগত তথ্যসহ API রেসপন্স আপনার ডিভাইসেই থাকে। ট্যাবটি বন্ধ করলে কিছুই থাকে না।
হার ও নিয়ম বদলায়; কোনো অঙ্কের ওপর নির্ভর করার আগে সূত্রটি দেখে নিন।
এখনও আটকে আছেন? JSON থেকে Rust স্ট্রাক্ট কনভার্টার সম্পর্কে প্রশ্ন করুন আর যিনি জানেন তিনিই উত্তর দিতে পারেন। কোনো অ্যাকাউন্ট লাগবে না।