JSON في Rust للمبتدئين: تحليل البيانات وتسلسلها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع JSON في Rust



JSON (JavaScript Object Notation) هو أحد أشهر تنسيقات تبادل البيانات في تطوير الويب وملفات التكوين وAPI. إذا كنت تتعلم Rust وتريد أن تتعلم كيفية العمل بكفاءة مع JSON، فهذه المقالة لك. سنستعرض المكتبات الأساسية، مبادئ التحليل والتسلسل، وسنحلل أمثلة عملية على الكود.



في Rust، تم بناء النظام البيئي للعمل مع JSON حول الكريت serde - وهو إطار عمل قوي لتسلسل البيانات وإلغاء تسلسلها. بالاقتران مع serde_json، يسمح بتحويل هياكل البيانات بسهولة إلى JSON والعكس. دعنا نفهم كيف يعمل ذلك.



تثبيت وإعداد التبعيات



للبدء، سننشئ مشروعًا جديدًا ونضيف التبعيات اللازمة في ملف Cargo.toml:



[dependencies]serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"


يوفر الكريت serde وحدات الماكرو #[derive(Serialize, Deserialize)] التي تقوم تلقائيًا بتنفيذ السمات اللازمة لهياكلك. serde_json مسؤول مباشرة عن العمل مع تنسيق JSON.



تحليل JSON: من سلسلة نصية إلى هيكل



لنفترض أن لدينا سلسلة JSON تحتوي على معلومات عن مستخدم. نريد تحويلها إلى هيكل Rust محدد النوع. إليك كيف يتم ذلك:



use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]struct User { name: String, age: u32, email: String, is_active: bool,}

fn main() { let json_data = r#" { "name": "أليكسي", "age": 28, "email": "alex@example.com", "is_active": true } "#;

// تحليل JSON إلى هيكل let user: User = serde_json::from_str(json_data).expect("خطأ في تحليل JSON"); println!("المستخدم: {:?}", user); println!("الاسم: {}", user.name); println!("العمر: {}", user.age);}


لاحظ السمة #[derive(Debug, Deserialize, Serialize)]. Debug يسمح بطباعة الهيكل في وحدة التحكم، بينما Deserialize و Serialize يمنحان القدرة على تحويل البيانات إلى JSON والعكس.



معالجة الكائنات المتداخلة



غالبًا ما يحتوي JSON على كائنات متداخلة. لنلق نظرة على مثال مع عنوان المستخدم:



#[derive(Debug, Deserialize, Serialize)]struct Address {    city: String,    street: String,    zip_code: String,}

#[derive(Debug, Deserialize, Serialize)]struct User { name: String, age: u32, address: Address,}

fn main() { let json_data = r#" { "name": "ماريا", "age": 32, "address": { "city": "موسكو", "street": "تفيرسكايا، 15", "zip_code": "101000" } } "#;

let user: User = serde_json::from_str(json_data).unwrap(); println!("المدينة: {}", user.address.city);}


العمل مع مصفوفات JSON



يتم تحويل المصفوفات في JSON إلى Vec أو مجموعات Rust أخرى:



use serde::Deserialize;

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

fn main() { let json_array = r#" [ {"id": 1, "name": "لابتوب", "price": 75000.50}, {"id": 2, "name": "فأرة", "price": 1500.00}, {"id": 3, "name": "لوحة مفاتيح", "price": 3500.00} ] "#;

let products: Vec<Product> = serde_json::from_str(json_array).unwrap(); for product in &products { println!("{}: {} روبل", product.name, product.price); }}


التسلسل: من هيكل إلى JSON



العملية العكسية - تحويل هيكل Rust إلى سلسلة JSON. وهذا ما يسمى بـ

المدونات

توصيات الكتب