تحويل JSON إلى Rust struct مع serde
يكتب المولد struct لكل كائن جاهزة للقراءة عبر serde_json::from_str دون تعديل.
جارٍ تحميل الأداة…
المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.
طريقة الاستخدام
- أدخل نص JSON واسم النوع الرئيسي.
- تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
- انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.
طريقة الحساب
String وi64 وf64 وbool وVec<T> وserde_json::Value، وstruct لكل كائن مع Serialize وDeserialize. الحقول بصيغة snake_case، ويضاف #[serde(rename)] عند اختلاف الاسم عن المفتاح، والحقل الذي يقبل null أو يغيب يصبح Option<T>.
مثال
المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Root { pub id: i64, pub name: String, pub email: String, pub is_active: bool, pub balance: f64, pub tags: Vec<String>, pub address: Address, pub orders: Vec<Order>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Address { pub city: String, pub postal_code: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Order { pub order_id: String, pub total: f64, pub coupon: Option<String>, }، عدد الأنواع: 3، عدد الحقول: 13.
{
"id": 1024,
"name": "Sara Ahmed",
"email": "sara@example.com",
"is_active": true,
"balance": 1520.75,
"tags": ["vip", "riyadh"],
"address": { "city": "Riyadh", "postal_code": "12211" },
"orders": [
{ "order_id": "A-1", "total": 99.5, "coupon": "EID10" },
{ "order_id": "A-2", "total": 120, "coupon": null }
]
}use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub id: i64,
pub name: String,
pub email: String,
pub is_active: bool,
pub balance: f64,
pub tags: Vec<String>,
pub address: Address,
pub orders: Vec<Order>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Address {
pub city: String,
pub postal_code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Order {
pub order_id: String,
pub total: f64,
pub coupon: Option<String>,
}الحدود والملاحظات
- يحتاج serde مع الخاصية derive وserde_json في ملف Cargo.toml.
- كل الأعداد الصحيحة تصبح i64 والكسرية f64.
أسئلة شائعة عن هذه الأداة
ماذا يحدث إذا غاب حقل من نوع Option؟
تقرؤه serde كقيمة None دون خطأ، أما الحقل غير الاختياري فغيابه يعطي خطأ missing field.
لماذا أصبح الحقل type باسم type_؟
type كلمة محجوزة في Rust، فيضاف شرطة سفلية ويبقى الاسم الأصلي في #[serde(rename)].
هل ترسل بياناتي إلى خادم؟
لا، التحويل يعمل داخل متصفحك ولا يغادر نص JSON جهازك.
