0Pricing
Learn Rust Coding · درس

التعامل مع JSON

serde_json

التعامل مع JSON درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

حزمة serde_json

إن serde_json هي تطبيق تنسيق JSON الخاص بـ serde. وتوفر دوال للتحويل بين قيم Rust ونص JSON.

  • to_string / from_str للنصوص
  • Value للتعامل مع JSON الديناميكي

تحويل بنية إلى نص JSON

تسلسل serde_json::to_string أي قيمة من النوع Serialize إلى نص JSON.

use serde::Serialize;

#[derive(Serialize)]
struct User { id: u32, name: String }

fn main() {
    let u = User { id: 1, name: "Alice".to_string() };
    let json = serde_json::to_string(&u).unwrap();
    println!("{}", json);
}

تحويل نص JSON إلى بنية

يحلل serde_json::from_str JSON إلى قيمة ذات نوع محدد، ويُرجع Result لتتمكنوا من معالجة الإدخال غير الصحيح.

use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct User { id: u32, name: String }

fn main() {
    let data = r#"{"id":1,"name":"Alice"}"#;
    let u: User = serde_json::from_str(data).unwrap();
    println!("{:?}", u);
}

تنسيق قابل للقراءة

استخدموا to_string_pretty للحصول على JSON مقسّم إلى أسطر ومزاح البادئة ليسهل على البشر قراءته، وهو مفيد لملفات الإعداد وتصحيح الأخطاء.

use serde::Serialize;

#[derive(Serialize)]
struct Cfg { debug: bool, level: u8 }

fn main() {
    let c = Cfg { debug: true, level: 3 };
    println!("{}", serde_json::to_string_pretty(&c).unwrap());
}

وحدة الماكرو json!

أنشئوا JSON مباشرةً باستخدام وحدة الماكرو json!، التي تنتج قيمة Value دون تعريف بنية.

use serde_json::json;

fn main() {
    let v = json!({
        "name": "Alice",
        "roles": ["admin", "user"]
    });
    println!("{}", v);
}

نوع Value

إن serde_json::Value تعداد يمثل أي عقدة في JSON: قيمة فارغة أو منطقية أو رقمًا أو نصًا أو مصفوفة أو كائنًا. استخدموه عندما يكون الشكل غير معروف.

use serde_json::Value;

fn main() {
    let data = r#"{"name":"Bob","age":30}"#;
    let v: Value = serde_json::from_str(data).unwrap();
    println!("{}", v["name"]);
    println!("{}", v["age"]);
}

القراءة الآمنة من Value

تُرجع الفهرسة قيمةً من النوع Value؛ استخدموا دوال الوصول مثل as_str أو as_i64، التي تُرجع Option، لقراءة البيانات ذات النوع بأمان.

use serde_json::Value;

fn name_of(v: &Value) -> Option<&str> {
    v.get("name")?.as_str()
}

نمذجة الوصول إلى JSON باستخدام Rust البسيط

تشبه قراءة قيمة حسب مفتاح، مع قيمة بديلة عند غيابها، طريقة الاستعلام عن كائن من النوع Value. إليكم ذلك باستخدام HashMap.

use std::collections::HashMap;

fn main() {
    let mut obj: HashMap<&str, &str> = HashMap::new();
    obj.insert("name", "Alice");
    let name = obj.get("name").copied().unwrap_or("unknown");
    let city = obj.get("city").copied().unwrap_or("unknown");
    println!("name={} city={}", name, city);
}

البايتات والكتّاب

لتحسين الأداء، تسلسل to_vec البيانات إلى بايتات، بينما يبث to_writer مباشرةً إلى أي io::Write مثل ملف أو مقبس.

use serde::Serialize;

#[derive(Serialize)]
struct Msg { text: String }

fn to_bytes(m: &Msg) -> Vec<u8> {
    serde_json::to_vec(m).unwrap()
}

معالجة أخطاء التحليل

تُرجع from_str قيمة Result. طابقوا الخطأ لعرض رسالة مفيدة للمستخدمين بدلًا من التسبب في توقف البرنامج.

use serde::Deserialize;

#[derive(Deserialize)]
struct User { id: u32 }

fn parse(s: &str) -> String {
    match serde_json::from_str::<User>(s) {
        Ok(u) => format!("id {}", u.id),
        Err(e) => format!("invalid JSON: {}", e),
    }
}

التحويل بين Value والهياكل

تحوّل serde_json::from_value وto_value بين بنية ذات نوع محدد وقيمة Value الديناميكية عند الحاجة إلى كليهما.

use serde::Deserialize;
use serde_json::json;

#[derive(Deserialize)]
struct User { name: String }

fn main() {
    let v = json!({"name": "Eve"});
    let u: User = serde_json::from_value(v).unwrap();
    println!("{}", u.name);
}

تحقق سريع

اختبروا فهمكم للتعامل مع JSON.

مراجعة

لقد تعلمتم التعامل مع JSON باستخدام serde_json:

  • يحوّل to_string / from_str بين الهياكل ونص JSON
  • ينسّق to_string_pretty البيانات بطريقة سهلة القراءة
  • تتعامل وحدة الماكرو json! والنوع Value مع JSON الديناميكي
  • استخدموا دوال الوصول وResult للقراءة والتحليل بأمان

التالي: تخصيص التسلسل باستخدام سمات الحقول.

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

هل درس «التعامل مع JSON» مجاني؟

نعم — نص درس «التعامل مع JSON» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «التعامل مع JSON»؟

serde_json تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التعامل مع JSON»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التسلسل وإلغاء التسلسل
  2. التعامل مع JSON
  3. التسلسل المخصص
  4. تنسيقات أخرى
← العودة إلى Learn Rust Coding