تعرف على كيفية تحويل البيانات بين تنسيق JSON وكائنات Rust دون عناء باستخدام تقنيات التسلسل وإلغاء التسلسل في Rust.

برز JSON (JavaScript Object Notation) كتنسيق شائع لتبادل البيانات في البرنامج نظرًا لبساطته وسهولة قراءته ودعمه الواسع عبر مختلف البرامج اللغات. JSON هو بديل خفيف الوزن لـ XML لنقل البيانات بين الخادم وتطبيق الويب أو بين مكونات نظام البرامج المختلفة.

أحد الجوانب الرئيسية للعمل مع JSON هو عملية التسلسل وإلغاء التسلسل يسمح لك بتحويل بيانات JSON إلى تنسيق منظم يمكنك معالجته بسهولة داخل ملف البرامج. في معظم الأوقات ، إذا كنت ترغب في العمل مع JSON بلغات أخرى ، فقد تحتاج إلى إجراء تسلسل وإلغاء تسلسل بيانات JSON في هياكل البيانات المضمنة في اللغة.

البدء مع Serde

Serde (التسلسل وإلغاء التسلسل) هي مكتبة Rust شائعة الاستخدام توفر إطارًا للتحويل هياكل بيانات الصدأ إلى تنسيقات للتخزين والنقل والمشاركة وغيرها.

يتيح Serde التحويل السلس بين أنواع بيانات Rust وتنسيقات تبادل البيانات المختلفة ، بما في ذلك JSON و YAML و BSON و CBOR و MessagePack وغيرها.

ينصب تركيز Serde الأساسي على جعل عملية التسلسل وإلغاء التسلسل بسيطة وفعالة قدر الإمكان مع الحفاظ على ميزات الكتابة والسلامة القوية.

instagram viewer

أضف هذه التوجيهات إلى التبعيات قسم الخاص بك Cargo.toml ملف للتثبيت والاستخدام سيردي ك الاعتماد على طرف ثالث مع Cargo.

[التبعيات]
سيردي = {الإصدار = "1.0.159"، الميزات = ["استخلاص"] }
serde_json = "1.0.96"

ستحتاج إلى كل من سيردي و serde_json للتفاعل مع JSON. ال سيردي يوفر قفص الوظائف الأساسية ، و serde_json قفص هو تنفيذ محدد من Serde للعمل مع JSON.

إليك كيفية استيراد ملف serde_json قفص و تسلسل و نزع التسلسل وحدات من سيردي قفص:

يستخدم serde:: {Serialize، Deserialize}؛
يستخدم serde_json.

بشكل عام ، تعد Serde أداة قوية ستحتاجها في ترسانة التطوير الخاصة بك إذا كنت تعمل مع JSON في Rust.

تسلسل البيانات مع Serde

تستلزم عملية التسلسل JSON تحويل نوع Rust (مخصص أو مدمج) إلى JSON لعمليات أخرى. يوفر Serde مجموعة من السمات التي يمكنك استخدامها مع بنية Rust لتمكين التحكم الدقيق في عملية التسلسل ، بما في ذلك # [اشتقاق (تسلسل)] تتيح لك إنشاء رمز تسلسل لهياكل البيانات الخاصة بك وتحويل بنية Rust إلى JSON.

ضع في اعتبارك هذا الهيكل الذي يمثل البيانات الحيوية للشخص ؛ إليك كيفية استيراد ملف تسلسل السمة على الهيكل:

يستخدم serde:: {Serialize، Deserialize}؛
يستخدم serde_json.

# [اشتقاق (تسلسل)]
هيكلشخص {
اسم: خيط,
عمر: u32,
}

بتعليق ملف شخص هيكل مع [#derive (تسلسل)]، فأنت تطلب من Serde إنشاء رمز التسلسل الضروري لـ شخص هيكل تلقائيا.

إليك كيفية إجراء تسلسل لمثيل شخص بنية لـ JSON:

يستخدم serde:: {Serialize} ؛
يستخدم serde_json.

الجبهة الوطنيةرئيسي() {
// التصريح عن مثيل هيكل الشخص بالاسم والحقول العمرية
يترك person = شخص {
اسم: "Chukwuemeriwo".إلى سلسلة()،
عمر: 28,
};

// يسلسل بنية الشخص إلى JSON باستخدام مكتبة serde_json
يترك json = serde_json:: to_string (& person) .expect ("فشل التسلسل");

// يطبع سلسلة JSON المتسلسلة
println!("JSON المسلسل: {}"، json) ؛
}

في ال رئيسي وظيفة serde_json قفص تسلسل شخص هدف. ال إلى سلسلة تأخذ الدالة إشارة إلى شخص الكائن وإرجاع سلسلة JSON تمثل البيانات المتسلسلة.

وأخيرا، فإن رئيسي تقوم وظيفة بطباعة JSON المتسلسلة على وحدة التحكم.

ال سيردي و serde_json متعددة الاستخدامات ، يمكنك أيضًا إجراء تسلسل للمصفوفات باستخدام serde.

يستخدم serde:: {Serialize، Deserialize}؛
يستخدم serde_json.

# [اشتقاق (تسلسل)]
هيكلإحداثيات {
س: f32,
ص: f32,
}

الجبهة الوطنيةرئيسي() {
يترك النقاط = vec![
إحداثيات {x: 1.0، ص: 2.0 },
إحداثيات {x: 3.5، ص: 4.5 },
];

يترك json = serde_json:: to_string (& Points) .expect ("فشل التسلسل");

println!("JSON المسلسل: {}"، json) ؛ // طباعة سلسلة JSON المتسلسلة
}

ال نقاط المتغير هو متجه من إحداثيات الهياكل التي تمثل النقاط على المستوى. تطبيق تسلسل ينسب إلى إحداثيات تتيح لك البنية إجراء تسلسل للمتجه إلى JSON دون عناء.

بالإضافة إلى ذلك ، يمكنك إجراء تسلسل للتعدادات في JSON باستخدام سيردي مثلك تسلسل الهياكل والمتجهات.

يستخدم serde:: {Serialize، Deserialize}؛
يستخدم serde_json.

# [اشتقاق (تسلسل ، إلغاء تسلسل)]
تعدادحيوان {
كلب(خيط),
قطة(u32),
طائر،
}

الجبهة الوطنيةرئيسي() {
يترك كلب = حيوان:: كلب ("صدئ".إلى سلسلة())؛

يترك json = serde_json:: to_string (& dog) .expect ("فشل التسلسل");

println!("JSON المسلسل: {}"، json) ؛
}

اعتمادًا على المتغير ، تتكيف عملية التسلسل وفقًا لذلك (في هذه الحالة ، ملف حيوان:: كلب يتضمن البديل أ خيط الحقل الذي سيتم تسلسله Serde كسلسلة JSON).

إزالة تسلسل البيانات مع Serde

إلغاء تسلسل JSON هو عملية تحويل بيانات JSON إلى أنواع بيانات أصلية للغة البرمجة. يوفر Serde إطارًا شاملاً لإلغاء تسلسل JSON الذي يعمل على معظم أنواع البيانات المضمنة.

على غرار التسلسل ، يقدم Serde سمات يمكنك استخدامها للتعليق على هياكل Rust الخاصة بك لعملية إلغاء التسلسل. سمتان شائعان للتسلسل هما # [اشتقاق (إلغاء التسلسل)] و # [serde (rename = "json_field_name")] صفات.

ال # [اشتقاق (إلغاء التسلسل)] تستمد السمة تلقائيًا تنفيذ إلغاء التسلسل الخاص بك أنواع هيكل الصدأ، بينما ال # [serde (rename = "json_field_name")] تسمح لك السمة بتعيين الحقول الهيكلية لأسماء حقول JSON المقابلة.

إليك كيفية إلغاء تسلسل بيانات JSON إلى نوع بنية مخصص باستخدام Serde:

يستخدم serde:: نزع التسلسل ؛
يستخدم serde_json.

// يحدد بنية الشخص مع سمة إزالة التسلسل من Serde
# [اشتقاق (إلغاء التسلسل)]
هيكلشخص {
# [serde (إعادة تسمية = "اسم")]// يعيد تسمية الحقل إلى "الاسم"
الاسم الكامل: خيط,
عمر: u32,
}

الجبهة الوطنيةرئيسي() {
يترك json_data = r #"
{
"اسم": "فلان الفلاني",
"عمر": 30
}
"#;

// يلغي تسلسل بيانات JSON إلى هيكل شخص
يترك الشخص: الشخص = serde_json:: from_str (json_data) .unwrap () ؛

// اطبع الاسم الكامل والعمر للشخص
println!("اسم: {}"، person.full_name) ؛
println!("عمر: {}"، person.age) ؛
}

بتعليق ملف شخص هيكل مع # [اشتقاق (إلغاء التسلسل)] ، فأنت تشير إلى أن Serde يمكنه إلغاء تسلسل البنية من JSON. ال # [serde (rename = "name")] السمة خرائط اسم الحقل في JSON إلى الاسم الكامل مجال.

ال from_str تقوم الوظيفة بإلغاء تسلسل ملفات json_data متغير في شخص الكائن و رئيسي وظيفة طباعة الحقول إلى وحدة التحكم.

يدعم Serde إلغاء التسلسل على أنواع بيانات Rust المختلفة ، بما في ذلك الأنواع الأولية والتعدادات والبنى المتداخلة والمجموعات.

إليك كيفية إلغاء تسلسل مصفوفة JSON إلى بنية Rust تحتوي على حقل متجه:

يستخدم serde:: نزع التسلسل ؛

# [اشتقاق (إلغاء التسلسل)]
هيكلبيانات {
أعداد: Vec<u32>,
}

الجبهة الوطنيةرئيسي() {
يترك json_data = r #"
{
"أعداد": [1, 2, 3, 4, 5]
}
"#;

يترك البيانات: البيانات = serde_json:: from_str (json_data) .unwrap () ؛

ل رقم في data.numbers {
println!("رقم: {}"، رقم)؛
}
}

ال رئيسي تقوم الوظيفة بإلغاء تسلسل ملفات json_data محتوى JSON في ملف بيانات متغير ، وتطبع الحلقة العناصر في المتجه.

يجب عليك التأكد من أن لديك أنواع البيانات والمعرفات الصحيحة لعملية إلغاء التسلسل.

Serde يتفاعل مع أطر ويب Rust المشهورة

Serde هي مكتبة قوية بها العديد من الميزات وواجهة برمجة تطبيقات بسيطة لتسلسل البيانات وإلغاء تسلسلها إلى تنسيقات مختلفة.

تم اعتماد Serde على نطاق واسع في نظام Rust البيئي ، وقد تم تضمين العديد من الصناديق والأطر المشهورة دعم Serde ، بما في ذلك أطر الويب الشائعة مثل Actix و Warp و Rocket وقواعد بيانات ORM مثل ديزل.