حوّل عينة JSON إلى بُنى Rust مع اشتقاقات serde وإعادة التسمية وOption وVec
يعمل في متصفحك. لا يُرسل أي شيء تكتبه إلى أي مكان. تم التحقق في 16 أكتوبر 2026.الصق عينة JSON واحصل على بُنى (structs) في Rust مع اشتقاقات Serialize وDeserialize من serde. تصبح الأعداد الصحيحة i64 وأي كسر عشري يجعل الحقل f64؛ والقيمة null أو المفقودة من بعض الكائنات تصبح Option<T>، والمفاتيح المكتوبة بشكل مختلف عن حقلها بصيغة snake_case تحصل على rename من serde، وعلى rename_all واحد عندما تكون كلها camelCase.
تُرجمت هذه الصفحة آليًا من الأصل الإنجليزي. لم يراجع أي شخص هذه الترجمة بعد، لذا فالنسخة الإنجليزية هي التي يُعتمد عليها. اقرأ الأصل الإنجليزي
الصق عينة JSON، مثل استجابة API، في المربع الأيسر.
تظهر بُنى Rust أثناء الكتابة، كل منها مع #[derive(Serialize, Deserialize)] وحقول بصيغة snake_case وإعادات التسمية التي تحتاجها من serde.
فعّل Option لكل حقل أو PartialEq إن أردتهما، وحدد اسم البنية الجذر.
اضغط نسخ، أو تنزيل لحفظ models.rs، وأضف serde (مع الميزة derive) وserde_json إلى Cargo.toml.
تفك Rust ترميز JSON باستخدام serde، ويحتاج كل كائن إلى بنية تحمل حقولها الأنواع الصحيحة وتقابل أسماؤها مفاتيح 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 خاص به. وتصبح الكلمات المحجوزة معرّفات خام مثل r#type؛ ولا يمكن أن تكون self وsuper وcrate خامًا، فتصبح self_ مع rename.
الخيارات. يناسب Option لكل حقل واجهات API التي قد تُسقط أي مفتاح. واشتقاق PartialEq يتيح للاختبارات مقارنة القيم. اسم البنية الجذر Root ما لم تسمّها.
فُحص كل ناتج بقراءة Rust مرة أخرى وفق قواعد serde وفك ترميز 9 عينات به. لا شيء مما تلصقه يغادر المتصفح.
الصق عينة JSON في المحوّل فتظهر بُنى Rust بجانبها، كل منها يشتق Serialize وDeserialize. أضف serde مع الميزة derive وserde_json إلى Cargo.toml، والصق البُنى في وحدة، وفك الترميز باستخدام serde_json::from_str::<Root>(&text).
يصبح الحقل Option عندما تُظهره العينة بقيمة null، أو عندما تُسقط بعض كائنات المصفوفة المفتاح. يفك serde ترميز المفتاح المفقود في Option إلى None، بينما يُعد أي حقل مفقود آخر خطأً، لذا فإن Option هو ما يتيح للبنية قبول كل كائن في العينة.
تُكتب الحقول بصيغة snake_case كما يطلب أسلوب Rust. وعندما يكون كل مفتاح صيغة camelCase لحقله، تحصل البنية على #[serde(rename_all = "camelCase")] واحد؛ وإلا يحصل كل حقل مكتوب بشكل مختلف على #[serde(rename = "key")] خاص به، فتُفك ترميز مفاتيح مثل first-name أو 2fa أيضًا.
لا يحدد JSON مدى كِبَر الرقم، لذا فإن i64 هو النوع الصحيح الآمن، وf64 يوافق الدقة المضاعفة التي تُقرأ بها أرقام JSON. ويصبح الحقل f64 بمجرد أن تحمل أي قيمة في العينة جزءًا عشريًا، لأن serde يرفض قراءة 4.5 في عدد صحيح.
تُكتب الكلمات المحجوزة معرّفات خامًا، مثل r#type، ويزيل serde البادئة r# عند مطابقتها بالمفتاح، فلا حاجة إلى rename. والكلمات المحجوزة الأربع التي لا يمكن أن تكون خامًا، وهي self وSelf وsuper وcrate، تصبح self_ وما شابهها، مع rename يعيدها إلى المفتاح الأصلي.
لا. يجري التحويل في متصفحك دون أي طلب إلى خادم، ولا يُحفظ JSON، فتبقى استجابات API التي تحمل رموز وصول أو بيانات شخصية على جهازك. أغلق التبويب ولن يبقى شيء.
تتغير المعدلات والقواعد؛ راجع المصدر قبل الاعتماد على أي رقم.
هل ما زلت عالقًا؟ اسأل عن محوّل JSON إلى بُنى Rust ويمكن لأي شخص يعرف الإجابة أن يجيب. لا حاجة إلى حساب.