JSON إلى هياكل Rust (serde)

ولّد هياكل Rust مع اشتقاقات serde Serialize/Deserialize وحقول snake_case وسمات rename وOption لقيم null وVec للمصفوفات من JSON. مجاني.

يتطلب حزمتي serde (مع derive) وserde_json. الحقول بصيغة snake_case مع #[serde(rename)] عندما يختلف مفتاح JSON.

يعمل بالكامل في متصفحك. لا يتم رفع بياناتك أبدًا.

أدوات ذات صلة

عرض الكل

ما هو JSON إلى Rust؟

الصق JSON لتحصل على تعريفات struct في Rust تفكّه بواسطة serde. يشتق كل هيكل Debug, Clone, Serialize, Deserialize؛ وأسماء الحقول بنمط 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

استخدمه عند كتابة عميل Rust أو أداة سطر أوامر تقرأ JSON. حسّن الأنواع بعد ذلك – مثل u32 للأعداد الصغيرة أو أنواع chrono للطوابع الزمنية – لأن العيّنة لا تكشف النطاقات الحقيقية.

كيف يعمل JSON إلى Rust

تُجتاز العيّنة تكراريًا ويجمع كل موضع الأنواع التي رآها. تُدمج مصفوفات الكائنات في نوع واحد: فالمفتاح الغائب من بعض العناصر يصبح اختياريًا، والمفتاح الذي يكون null في موضع ما يصبح قابلًا لـ null، والأعداد الصحيحة المختلطة بكسرية تصبح نوع الفاصلة العائمة، وأي خلط آخر للأنواع يعود إلى نوع ديناميكي. وتصبح الكائنات المتداخلة أنواعًا مسماة (PascalCase للمفتاح مع إفراد مفاتيح المصفوفات: orders ← Order) مع لواحق رقمية عند تعارض الأسماء. يقابل ناتج Rust الأعداد الصحيحة بـ i64 والكسرية بـ f64 والنصوص بـ String والمنطقية بـ bool والمصفوفات بـ Vec<T> والقيم القابلة لـ null بـ Option<T> والقيم الديناميكية أو التي هي null فقط بـ serde_json::Value. وتصبح الحقول الغائبة من بعض العيّنات Option<T> مع #[serde(default, skip_serializing_if = "Option::is_none")]. وتُكتب الكلمات المحجوزة مثل type كمعرّفات خام (r#type).

حالات الاستخدام الشائعة

  • فك استجابة REST API باستخدام reqwest مع serde
  • نمذجة ملف إعداد JSON لأداة سطر أوامر
  • إنشاء أنواع لمعالج webhook
  • تحويل بيانات الاختبار لاختبارات تكامل Rust

الأسئلة الشائعة

أي حزم (crates) أحتاج؟

serde مع الميزة derive وserde_json: serde = { version = "1", features = ["derive"] } وserde_json = "1".

لماذا serde_json::Value؟

تُستخدم عندما يخلط مفتاح الأنواع أو يكون null دائمًا في العيّنة، فلا يمكن اختيار نوع Rust محدد بأمان.

لماذا r#type؟

type كلمة محجوزة في Rust؛ وصيغة المعرّف الخام تتيح استخدامها اسمًا لحقل بينما يطابق serde مفتاح JSON.

استكشف المزيد من الفئات